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

.NET Fiddle so you can try it