E 'possibile creare un Linq che genera una lista contenente tutte le possibili combinazioni di una serie di numeri ??Combination Generator in Linq
Se si immette "21" Sarebbe generare un elenco con gli elementi:
list[0] = "21"
list[1] = "22"
list[2] = "11"
list[3] = "12"
(Non nessesarily in questo ordine)
ho capito si può usare gamma di fare cose come:
List<char> letterRange = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (Char)i).ToList(); //97 - 122 + 1 = 26 letters/iterations
Che genera l'alfabeto da az. Ma non riesco a trasferire questa conoscenza per creare un generatore di combinazioni
Sono stato in grado di capire con il seguente codice, ma sembra troppo ingombrante e sono sicuro che può essere fatto con poche righe. Mi sembra davvero una cattiva soluzione che ho fatto.
Immaginate che ho chiamato GetAllCombinations("4321")
se aiuta
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 Non credo che questa risposta ha abbastanza voti positivi –
Solo per notare, questa funzione come data non fa quello che chiede la domanda. (Genera '{" 12 "," 21 "}', manca '" 11 "' e '" 22 "'.) Posso solo supporre che il richiedente sia riuscito ad adattarlo a qualcosa di utile. – Rawling
Anche questo codice non funziona se nella stringa sono presenti caratteri duplicati. Se la stringa contiene "banana", la seconda chiamata a IndexOf ('a') nel ciclo for restituirà nuovamente il primo 'a'. – Webreaper