C#如何在字符串列表中相互排列所有元素
C# How to permutate all elements with each others in a List of string
我有一个字符串列表,我想要所有元素相互之间的所有排列
示例:
var myList = new List<string>{ "AB", "CD", "EF", "GK" };
结果我想要这样的字符串。
var resultStr = "ABCD,ABEF,ABGK,CDAB,CDEF,CDGK,EFAB,EFCD,EFGK,GKAB,GKCD,GKEF";
请注意 resultStr 不包括“ABAB”,“CDCD”,“EFEF”,“GKGK”
除了双 for/foreach 循环之外,还有什么捷径可以做到这一点吗?
问: 除了双 for/foreach 循环之外,有没有什么捷径可以做到这一点?
是的,您可以使用 LINQ。
这是您的结果的 LINQ 语法表达式:
var myList = new List<string>{ "AB", "CD", "EF", "GK" };
var result = from a in myList from b in myList where a != b select a+b;
var resultStr = string.Join(",", result);
Console.WriteLine(resultStr);
您还可以使用 LINQ 扩展方法:
var myList = new List<string>{ "AB", "CD", "EF", "GK" };
var result = myList.SelectMany(a => myList.Where(b => b != a).Select(b => a + b));
var resultStr = string.Join(",", result);
Console.WriteLine(resultStr);
两者都会输出
ABCD,ABEF,ABGK,CDAB,CDEF,CDGK,EFAB,EFCD,EFGK,GKAB,GKCD,GKEF
我有一个字符串列表,我想要所有元素相互之间的所有排列
示例:
var myList = new List<string>{ "AB", "CD", "EF", "GK" };
结果我想要这样的字符串。
var resultStr = "ABCD,ABEF,ABGK,CDAB,CDEF,CDGK,EFAB,EFCD,EFGK,GKAB,GKCD,GKEF";
请注意 resultStr 不包括“ABAB”,“CDCD”,“EFEF”,“GKGK”
除了双 for/foreach 循环之外,还有什么捷径可以做到这一点吗?
问: 除了双 for/foreach 循环之外,有没有什么捷径可以做到这一点?
是的,您可以使用 LINQ。
这是您的结果的 LINQ 语法表达式:
var myList = new List<string>{ "AB", "CD", "EF", "GK" };
var result = from a in myList from b in myList where a != b select a+b;
var resultStr = string.Join(",", result);
Console.WriteLine(resultStr);
您还可以使用 LINQ 扩展方法:
var myList = new List<string>{ "AB", "CD", "EF", "GK" };
var result = myList.SelectMany(a => myList.Where(b => b != a).Select(b => a + b));
var resultStr = string.Join(",", result);
Console.WriteLine(resultStr);
两者都会输出
ABCD,ABEF,ABGK,CDAB,CDEF,CDGK,EFAB,EFCD,EFGK,GKAB,GKCD,GKEF