我得到一个字符串:z | a | b | c | a | b | c | a | b | c
我想要三个数组或列表:arrayOne = a a a,arrayTwo = b b b,arrayThree = c c c
到目前为止,我像这样分割字符串
List<string> myList = myString.Split('|').ToList();
z,a,b,c可以是任何字符串值
任何帮助将不胜感激。
arrayOne = myListIndex 1,4,7
arrayTwo= myListIndex 2,5,8
arrayThree = myListIndex 3,6,9
但myList可以是任意长度
答案 0 :(得分:8)
如果我理解正确,您需要使用GroupBy()
来获取列表:
var result = myString.Split('|').ToList()
.GroupBy(c => c)
.Select(g => g.ToList())
以下是LinqPad的结果:
答案 1 :(得分:2)
跳过第一项并使用Index mod 3
获取所需的列表。
string myString = "z|a|b|c|a|b|c|a|b|c";
List<List<string>> result = myString.Split('|').Skip(1)
.Select((s, i) => new { s, i })
.GroupBy(x => x.i % 3)
.Select(g => g.Select(c => c.s).ToList())
.ToList();
答案 2 :(得分:0)
您可以使用.GroupBy()
myList.GroupBy(a => a).Select(group => group.ToList());
这将是您想要的列表集合。
如果你保留这些组,你可以看到集合的Key
分组。
答案 3 :(得分:0)
跳过第一个项目并将其余部分分成三个列表,每个第3个元素
var arrayOne = myList.Skip(1).Where((x, i) => i % 3 == 0).ToList();
var arrayTwo = myList.Skip(1).Where((x, i) => i % 3 == 1).ToList();
var arrayThree = myList.Skip(1).Where((x, i) => i % 3 == 2).ToList();