代码之家  ›  专栏  ›  技术社区  ›  Thorin Oakenshield

如何使用LINQ从C中的列表<string>中获取“One-One”置换字符串

  •  1
  • Thorin Oakenshield  · 技术社区  · 14 年前

    我有一个字符串列表

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

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

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

    使用LINQ有什么方法可以做到这一点吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Bennor McCarthy    14 年前
    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);
    
        2
  •  3
  •   mancaus    14 年前

    像这样,假设每个列表中没有重复。

    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))