可以說我有一個包含人名和他們的原籍城市的對象。在c中使用LINQ查找分組列表的組合#
public class personDetails
{
public string City;
public string Name;
}
而且我有一個列表,並添加了以下條目。
Name City
John | London
Jane | London
Tom | New York
Bob | New York
Fred | New York
我在找的是所有可能的名稱組合,按城市分組。
John Tom
John Bob
John Fred
Jane Tom
Jane Bob
Jane Fred
我能做到這一點,如果我事先知道的組數,通過使用下面的代碼
List<personDetails> personList = new List<personDetails>();
//populate list
var groupedPersons = personList.GroupBy(c => c.City);
foreach (var item1 in groupedPersons[0])
{
foreach (var item2 in groupedPersons[1])
{
Console.WriteLine(item1.Name + " " + item2.Name);
}
}
但是,這隻能如果我知道團體提前數,並迅速隨着團體數量的增長變得笨重。我敢肯定,有一種使用LINQ來完成這項工作的優雅方式,任何人都可以從中得到一些啓示。
看看這個答案http://stackoverflow.com/questions/9168269/permutation-algorithms-in-c-sharp。你可以加入你自己的清單。 – Brad
@Brad這對於2個城市列出的示例有效。 OP想要的是一個N維交叉乘積,其中N直到運行時才知道。該代碼片段不提供它。 – Servy