Linq -basierte Lösung (vorausgesetzt, dass die Liste nicht null
oder empty
Sublisten hat und alle Werte innerhalb der einzelnen betrachtet sublist einzigartig/verschiedene ist):
private static IEnumerable<List<T>> MyEnumerator<T>(List<List<T>> data) {
List<int> indexes = Enumerable.Repeat(0, data.Count).ToList();
do {
yield return indexes
.Select((value, i) => data[i][value])
.ToList();
for (int i = data.Count - 1; i >= 0; --i)
if (indexes[i] == data[i].Count - 1)
indexes[i] = 0;
else {
indexes[i] += 1;
break;
}
}
while (indexes.Any(value => value != 0));
}
Test:
List<List<String>> data = new List<List<string>>() {
new List<string> { "F1", "F2", "F3"},
new List<string> { "P1", "P2"},
new List<string> { "A1", "A2", "A3"},
};
var result = MyEnumerator(data).Select(list => "{" + string.Join(", ", list) + "}");
Console.Write(string.Join(Environment.NewLine, result));
Ergebnis:
{F1, P1, A1}
{F1, P1, A2}
{F1, P1, A3}
{F1, P2, A1}
{F1, P2, A2}
{F1, P2, A3}
{F2, P1, A1}
{F2, P1, A2}
{F2, P1, A3}
{F2, P2, A1}
{F2, P2, A2}
{F2, P2, A3}
{F3, P1, A1}
{F3, P1, A2}
{F3, P1, A3}
{F3, P2, A1}
{F3, P2, A2}
{F3, P2, A3}
Edit:, wenn Sie eine Liste der passieren haben Komma Strings getrennt
List<string> source = new List<string> {
"F1,F2,F3",
"P1,P2",
"A1,A2,A3",
};
Sie benötigt List<List<string>>
mit einem Linq bekommen mehr
List<List<String>> data = source
.Select(line => line
.Split(',')
.Distinct()
.ToList())
.ToList();
var result = MyEnumerator(data).Select(list => "{" + string.Join(", ", list) + "}");
Console.Write(string.Join(Environment.NewLine, result));
Sind die Werte innerhalb jeder * Unterliste * (z. B. '{A1, A2, A3}') * deutlich *? –
Evtl. mit http://stackoverflow.com/questions/545703/combination-of-listlistint duplizieren –
Nein, es ist keine Unterliste. Z.B. Ich habe eine String-Liste. Liste [0] ist {F1, F2, F3}. Liste [1] = {P1, P2} und Liste [2] = {A1, A2, A3}. I Aktualisieren Sie meine Frage und fügen Sie ein Bild hinzu, damit Sie es verstehen können –