Für mein Problem habe ich eine Liste mit einer Zählung größer als 6+. Aus dieser Liste möchte ich eine Liste erstellen, die jede mögliche Kombination der Originalkarten enthält, die genau 6 Karten lang ist. (Sie müssen eindeutig sein und Reihenfolge spielt keine Rolle)Wie bekommt man alle einzigartigen Positionen aus einer Liste?
so 01,02,03,04,05,06 Objekt ist für mich wie 06,05,04,03,02,01
//STARTER list with more then 6 value's
List <ClassicCard> lowCardsToRemove = FrenchTarotUtil.checkCountLowCardForDiscardChien(handCards);
Die Lösung fand ich und verwendet:
public static List generateAllSubsetCombinations (object [] Fullset, ulong subsetSize) { if (Fullset == null) { throw new Argument ("Wert kann nicht sein null. "," fullSet "); } sonst if (subsetSize < 1) { neue ArgumentException werfen ("Subset-Größe muss 1 oder größer sein.", "SubsetSize"); } } if ((ulong) fullSet.LongLength < subsetSize) { Neue ArgumentException auslösen ("Die Subset-Größe darf nicht größer sein als die Gesamtzahl der Einträge im gesamten Set.", "SubsetSize"); }
// All possible subsets will be stored here
List<object[]> allSubsets = new List<object[]>();
// Initialize current pick; will always be the leftmost consecutive x where x is subset size
ulong[] currentPick = new ulong[subsetSize];
for (ulong i = 0; i < subsetSize; i++) {
currentPick[i] = i;
}
while (true) {
// Add this subset's values to list of all subsets based on current pick
object[] subset = new object[subsetSize];
for (ulong i = 0; i < subsetSize; i++) {
subset[i] = fullSet[currentPick[i]];
}
allSubsets.Add(subset);
if (currentPick[0] + subsetSize >= (ulong)fullSet.LongLength) {
// Last pick must have been the final 3; end of subset generation
break;
}
// Update current pick for next subset
ulong shiftAfter = (ulong)currentPick.LongLength - 1;
bool loop;
do {
loop = false;
// Move current picker right
currentPick[shiftAfter]++;
// If we've gotten to the end of the full set, move left one picker
if (currentPick[shiftAfter] > (ulong)fullSet.LongLength - (subsetSize - shiftAfter)) {
if (shiftAfter > 0) {
shiftAfter--;
loop = true;
}
}
else {
// Update pickers to be consecutive
for (ulong i = shiftAfter+1; i < (ulong)currentPick.LongLength; i++) {
currentPick[i] = currentPick[i-1] + 1;
}
}
} while (loop);
}
return allSubsets;
}
Siehe http://stackoverflow.com/questions/127704/algorithm-to-return-all-combinations-of-k-elements-from-n –
So findet man alle Kombinationen von 'k erzeugen wollen 'Werte von' n' Werten? Wie 'n' wählen Sie' k' oder 'nCk' in der Statistik? –
Ich möchte jede eindeutige Kombination von "k" Objekten aus "n" Werten, wobei lengt n variabel ist und wo k lengt ist immer 6. – schadowfax