如何使用LINQ </string>从C#中的List <string>获取“One -one”排列字符串

时间:2010-09-21 05:46:09

标签: c# linq

我有一个字符串列表

List<String> MyList=new List<String>{ "A,B" , "C,D,E" , "F,G" };

我需要将List“MyList”转换为以下格式

"A-B"
"B-A"
"C-D"
"C-E"
"D-C"
"D-E"
"E-C"
"E-D"
"F-G"
"G-F"

现在我使用的方法是将每个项目拆分为“,”然后将其添加到新列表中,然后进行组合,然后在所有列表中执行联合操作。

有没有办法用LINQ做到这一点?

2 个答案:

答案 0 :(得分:3)

这样的事情,假设每个列表中没有重复。

from a in new List<String>{ "A,B" , "C,D,E" , "F,G" }
select a.Split(',') into b
from c in b
from d in b
where c != d
select c + "-" + d

允许重复更麻烦:

(new List<String>{ "A,B" , "C,D,E" , "F,G" }).Select(csv => 
    csv.Split(',')
    .SelectMany((a,i) => csv.Split(',').Select((b,j) => new { a, i, b, j } ))
    .Where(r => r.i != r.j)
    .Select(r => r.a + "-" + r.b))

答案 1 :(得分:2)

var items = new List<string>{ "A,B" , "C,D,E" , "F,G" };
var results = from x in items
              let y = x.Split(',')
              from z1 in y
              from z2 in y
              where z1 != z2
              select string.Format("{0}-{1}", z1, z2);