Kann jemand eine Lösung hierfü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. Daher kann ich 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\parsen (wahrscheinlich als Liste selbst) und dann alle Listen\Werte in den Listen durchlaufen.
Irgendwelche Ideen?
Ich bin mir nicht sicher, wie tief das gehen kann, bevor JMP denkt, dass Ihre Rekursion zu tief ist, also testen Sie es zuerst ... Wenn Sie zu viele Listen haben, gibt es eine etwas weniger hübsche Lösung mit einem Stapel. Aber wenn jede Liste mindestens zwei Elemente enthält, wird Ihnen meiner Meinung nach zuerst die Zeit davonlaufen.
// 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"}
};