Kann jemand eine Lösung dafür vorschlagen.
Ich habe mehrere Listen. Ich muss alle möglichen Wertekombinationen aus diesen Listen durchlaufen. Das Problem ist, dass die Anzahl der Listen, aus denen ich Werte entnehme, zur Laufzeit festgelegt wird. Ich kann also nicht zwei verschachtelte 'for'-Schleifen für zwei Listen und dann drei verschachtelte' for'-Schleifen für drei Listen schreiben. Ich muss irgendwie die Namen der Listen übergeben (wahrscheinlich als Liste selbst) und dann alle Listenwerte in den Listen durchlaufen.
Irgendwelche Ideen?
Ich bin mir nicht sicher, wie tief dies gehen kann, bevor JMP denkt, dass Ihre Rekursion zu tief ist. Testen Sie also zuerst ... Wenn Sie zu viele Listen haben, gibt es eine etwas weniger hübsche Umgehung mit einem Stapel. Aber wenn jede Liste mindestens zwei Elemente enthält, wird Ihnen wahrscheinlich zuerst die Zeit ausgehen.
// the variable length list of variable length lists
L = {{"a", "b"}, {"c"}, {"d", "e", "f"}, {"g", "h", "i", "j"}};
result = {}; // a place to accumulate the results
p = {}; // a single result
// a recursive function to "nest the for loops"
generate = Function( {i}, // the "layer"
{j}, // the local for-loop counter
If( i > N Items( L ),
result[N Items( result ) + 1] = p; // you could just use p at this point
Return();
);
For( j = 1, j <= N Items( L[i] ), j += 1, // go through all the items at this layer
Insert Into( p, L[i][j] ); // add each to the single result
Recurse( i + 1 ); // go to next layer
Remove From( p ); // remove from the single result
);
);
generate( 1 ); // run the recursive function
Show( result );Ergebnis = {
{"a", "c", "d", "g"},
{"a", "c", "d", "h"},
{"a", "c", "d", "i"},
{"a", "c", "d", "j"},
{"a", "c", "e", "g"},
{"a", "c", "e", "h"},
{"a", "c", "e", "i"},
{"a", "c", "e", "j"},
{"a", "c", "f", "g"},
{"a", "c", "f", "h"},
{"a", "c", "f", "i"},
{"a", "c", "f", "j"},
{"b", "c", "d", "g"},
{"b", "c", "d", "h"},
{"b", "c", "d", "i"},
{"b", "c", "d", "j"},
{"b", "c", "e", "g"},
{"b", "c", "e", "h"},
{"b", "c", "e", "i"},
{"b", "c", "e", "j"},
{"b", "c", "f", "g"},
{"b", "c", "f", "h"},
{"b", "c", "f", "i"},
{"b", "c", "f", "j"}
};