Ist es möglich, einige Linq zu erstellen, die eine Liste erzeugt, die alle möglichen Kombinationen einer Reihe von Zahlen enthält?Kombinationsgenerator in Linq
Bei der Eingabe von „21“ eine Liste mit den Elementen erzeugen würde:
list[0] = "21"
list[1] = "22"
list[2] = "11"
list[3] = "12"
(nessesarily nicht in dieser Reihenfolge)
Ich verstehe Sie Bereich verwenden können Dinge wie:
List<char> letterRange = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (Char)i).ToList(); //97 - 122 + 1 = 26 letters/iterations
Welche generiert das Alphabet von az. Aber ich kann nicht scheinen, dieses Wissen zu übertragen, um einen Kombinationsgenerator
zu machen Ich bin in der Lage, es mit dem folgenden Code herauszufinden, aber es scheint viel zu sperrig und ich bin sicher, dass es mit ein paar Zeilen getan werden kann. Es fühlt sich wirklich wie eine schlechte Lösung an, die ich gemacht habe.
Stellen Sie sich vor ich GetAllCombinations("4321")
genannt, wenn es
public static String[] GetAllCombinations(String s)
{
var combinations = new string[PossibleCombinations(s.Length)];
int n = PossibleCombinations(s.Length - 1);
for (int i = 0; i < s.Length; i++)
{
String sub;
String[] subs;
if (i == 0)
{
sub = s.Substring(1); //Get the first number
}
else if (i == s.Length - 1)
{
sub = s.Substring(0, s.Length - 1);
}
else
{
sub = s.Substring(0, i) + s.Substring(i + 1);
}
subs = GetAllCombinations(sub);
for (int j = 0; j < subs.Length; j++)
{
combinations[i * n + j] = s[i] + subs[j];
}
}
return combinations;
}
public static int PossibleCombinations(int n) //Combination possibilities. e.g 1-2-3-4 have 24 different combinations
{
int result = 1;
for (int i = 1; i <= n; i++)
result *= i;
return result;
}
+1 Ich glaube nicht, diese Antwort hat genug Upvotes –
Nur um zu bemerken, diese Funktion wie angegeben nicht tun, was die Frage fragt. (Es erzeugt '{" 12 "," 21 "}', fehlt '" 11 "' und '" 22 "'). Ich kann nur annehmen, dass der Fragesteller es in etwas Nützliches verwandelt hat. – Rawling
Dieser Code funktioniert auch nicht, wenn doppelte Zeichen in der Zeichenfolge vorhanden sind. Wenn die Zeichenfolge "Banane" enthält, gibt der zweite Aufruf von IndexOf ('a') in der for-Schleife das erste 'a' erneut zurück. – Webreaper