Ich nehme ein 2d-Array, das etwa wie [[player1, 10], [player2, 8]]
aussieht, aber mit etwa 12 Spielern. Ich bin zufrieden genug mit der Sortierung, die ich gehört habe, außer dass TeamA immer die "erste Wahl" des besseren Spielers erhält. Ich habe Mühe, einen Weg zu finden, TeamB den besseren Spieler jedes Mal zu geben. Unten ist der Code, der "gut genug" funktioniert.Teilen Array von Zahlen in 2 ausgeglichenen Arrays
data = [["player1", 10]. ["player2", 8], ["player3", 7], ["player4", 9]];
var teamA = [];
var teamB = [];
var remaining = [];
for (item in data) {
remaining.push(data[item].slice());
}
for (i in data) {
var max = 0;
var selection = [,];
var index = -1;
for (k in remaining) {
if (remaining[k][1] > max) {
selection = remaining[k];
max = remaining[k][1];
index = k;
}
}
remaining.splice(index, 1);
if (i % 2 == 0) {
teamA.push(selection);
} else {
teamB.push(selection);
}
}
Dies führt zu teamA: [["player1, 10],["player2", 8]]
und teamB: [["player4", 9],["player3", 7]]
Was würde ich es vorziehen player2 und Spieler3 wechseln Teams. Folgendes habe ich versucht.
In meinem Gehirn sollte dies gut funktioniert haben, aber wow tat es nicht! Ich landete mit 9 Spielern auf TeamB und 3 auf TeamA. Ich habe mit verschiedenen Varianten dieses Ansatzes ohne Glück getüftelt.
Irgendwelche Zeiger?
EDIT: Zur Verdeutlichung kann angenommen werden, dass der Datensatz unsortiert kommen wird und dass die Länge des Datensatzes immer gerade ist. Es wird keine Mannschaft mit mehr Spielern als die andere geben.
Haben Ihre Spielerdaten in sortierter Reihenfolge ankommen? (sortiert nach Spielerpunkten) – thenormalsquid
Sollten die Teams _exaktly_ sein, auch in Bezug auf die Anzahl der Spieler oder ist es in Ordnung für Team A, 3 Spieler und Team B 4 zu haben? – thenormalsquid
@ Thien-BachHuynh Siehe bearbeiten für die Antwort. – jtsmith1287