Cho phép nói rằng tôi có một đối tượng chứa tên người và thành phố của họ.Tìm các kết hợp của một danh sách được nhóm bằng cách sử dụng LINQ trong C#
public class personDetails
{
public string City;
public string Name;
}
Và tôi có danh sách có các mục nhập sau được thêm vào.
Name City
John | London
Jane | London
Tom | New York
Bob | New York
Fred | New York
Điều tôi đang tìm kiếm là tất cả các kết hợp có thể có tên, được nhóm theo thành phố.
John Tom
John Bob
John Fred
Jane Tom
Jane Bob
Jane Fred
tôi có thể làm điều này nếu tôi biết trước số lượng các nhóm, bằng cách sử dụng đoạn mã sau
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);
}
}
Tuy nhiên, chỉ có các công trình này nếu tôi biết số lượng các nhóm trước, và nhanh chóng trở nên khó sử dụng khi số lượng các nhóm phát triển lớn hơn. Tôi chắc chắn rằng có một cách thanh lịch để làm điều này bằng cách sử dụng LINQ, ai có thể làm sáng tỏ một số?
Hãy xem câu trả lời này http://stackoverflow.com/questions/9168269/permutation-algorithms-in-c-sharp. Bạn có thể tham gia danh sách của bạn với chính nó. – Brad
@Brad Điều đó sẽ phù hợp với ví dụ được liệt kê với 2 thành phố. Những gì OP muốn là một sản phẩm thập chiều N, trong đó N không được biết cho đến khi chạy. Đoạn mã đó không cung cấp. – Servy