Diciamo che ho un oggetto che contiene il nome di una persona e la loro città di origine.Ricerca di combinazioni di un elenco raggruppato utilizzando LINQ in C#
public class personDetails
{
public string City;
public string Name;
}
E ho un elenco con le seguenti voci aggiunto.
Name City
John | London
Jane | London
Tom | New York
Bob | New York
Fred | New York
Quello che sto cercando sono tutte le combinazioni possibili di nomi, raggruppati per città.
John Tom
John Bob
John Fred
Jane Tom
Jane Bob
Jane Fred
posso fare questo se so in anticipo il numero di gruppi, utilizzando il seguente codice
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);
}
}
Tuttavia, questo funziona solo se so che il numero di gruppi in anticipo, e in fretta diventa ingombrante quando la quantità di gruppi aumenta. Sono certo che c'è un modo elegante per farlo usando LINQ, qualcuno può far luce?
Date un'occhiata a questa risposta http://stackoverflow.com/questions/9168269/permutation-algorithms-in-c-sharp. Potresti unirti alla tua lista con se stessa. – Brad
@Brad Funzionerebbe per l'esempio elencato con 2 città. Ciò che l'OP vuole è un prodotto incrociato a N dimensioni, in cui N non è noto fino al runtime. Questo snippet di codice non lo fornisce. – Servy