问题描述
i具有类似“ A1-4,A1-6,A1-8,B1-1,B1-2,B1-3,B1-4 ... B1-8”的字符串 在这里,我需要将 A1 元素安排为 A1-1,A1-2,A1-3 ,因为我有3个元素。 如果我有A1-2,A1-3,A1-7,A1-8之类的元素,我需要安排为 A1-1,A1-2,A1-3,A1-4 ,因为我有4个元素
就像这我需要确定类型(A1或A2或B1或Z1),然后按用逗号分隔的数字排列它们。
string _sequenceNum="A1-4,A1-6,A1-8,B1-1,B1-2,B1-3,B1-4...B1-8";
_sequenceNum.split(",");
我的问题是如何识别类别
请帮助我
解决方法
您可以使用LINQ对列表进行分组和处理:
string sequenceNum="A1-4,A1-6,A1-8,B1-1,B1-2,B1-3,B1-4,B1-8";
var sequence = sequenceNum.Split(",");
var newSequence = sequence
.Select(x => x.Split('-')) // 1
.GroupBy(x => x[0]) // 2
.SelectMany(x => Enumerable.Range(1,x.Count()).Select(i => x.Key + "-" + i)) // 3
.ToList(); // 4
详细信息:
- 例如,将“ A1-4”放入数组{“ A1”,“ 4”}
- 这将数组的结果序列按其第一个元素(例如“ A1”)分组
- 这使用
Enumerable.Range(1,x.Count())
创建序列1、2,...(每个组中的元素数量一样多),然后将新字符串创建为“(groupname)-(index)”。SelectMany
将结果展平为单个序列。 - 从处理后的序列中创建新列表
string _sequenceNum = "A1-4,B1-8,B1-2";
var test = _sequenceNum.Split(',');
Array.Sort(test);
foreach (var a in test)
Console.WriteLine(a);
foreach (var a in test.Where(i => i.StartsWith("A")))
Console.WriteLine(a);
Console.WriteLine(string.Join(",",test));
Console.ReadLine();