尝试从数组中生成 n 组唯一对而不重复项,创建一组只使用数组中所有项一次的对。
我正在使用 javascript。我有一个数组,比如 10 个项目,我需要生成以下内容:
我正在使用的代码像这样被绊倒了:
arrPlayers = [1,2,3,4,5,6,7,8,9,10]
matchups-week-1 = [[1,2],[3,4],[5,6],[7,8],[9,10]]
matchups-week-2 = [[1,3],[2,4],[5,7],[6,8],[哎呀!! ] 不能再做 [9,10],所以这组将不起作用。
你看到 9,10 对是如何把代码画到 Angular 落里的吗?你只能产生 4 对,因为 9,10 不是唯一的。
我认为这很容易解决,但我被困住了。关于代码的任何想法都不会把自己描绘成这个“4 件套”的 Angular 落?
我正在使用的代码。 ...诚然,我正在捕获救命稻草。这就是我问这个问题的原因。
function CreateMatchups(player_ids){
//Create array of PLAYER IDs where checkbox = checked
arrPlayers = player_ids.split(", ");
arrOpponents = arrPlayers;
arrPrevUsed = GetPrevUsedPairs();
var arrUsed = [];
var arrTempMatchups = [];
var intNumPlayers = arrPlayers.length;
var blnOddNumberOfPlayers = isOdd(intNumPlayers);
if(blnOddNumberOfPlayers){
arrPlayers.push(9999); //bogus id for placeholder player - fix this
}
for (var i = 0; i < arrPlayers.length; i++) {
player_id = arrPlayers[i];
if(!arrUsed.contains(player_id)){
for (var j = 0; j < arrOpponents.length; j++) {
opponent_id = arrOpponents[j];
if((!arrUsed.contains(opponent_id)) && (!arrUsed.contains(player_id)) && (player_id != opponent_id)){
matchup = player_id + "vs" + opponent_id;
if(!arrPrevUsed.contains(matchup)) {
arrTempMatchups.push(matchup);
arrUsed.push(player_id);
arrUsed.push(opponent_id);
}
}
}
}
}
return arrTempMatchups;
}
最佳答案
这叫做排列。
function pairwise(list) {
if (list.length < 2) { return []; }
var first = list[0],
rest = list.slice(1),
pairs = rest.map(function (x) { return [first, x]; });
return pairs.concat(pairwise(rest));
}
var result = pairwise(['1','2','3','4','5','6','7','8','9','10']);
document.write(JSON.stringify(result));
关于javascript - 从数组中生成 n 组唯一对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36254049/