从数组生成n组唯一对

时间:2016-03-27 23:52:59

标签: javascript arrays

尝试从数组中生成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],[ooops !! ]不能再做[9,10]因此这套不起作用。

你看到9,10对如何将代码描绘成一个角落?你只能生产4对,因为9,10不是唯一的。

我认为这很容易解决,但我被卡住了。关于代码的任何想法都不会将自己描绘成这个“4个角落”的角落?

我正在使用的代码。 ...诚然,我正在抓稻草。这就是我问这个问题的原因。

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;

    }

2 个答案:

答案 0 :(得分:1)

它被称为排列

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));

答案 1 :(得分:1)

当我终于发现如何使用标准术语引用我想要做的事情时,问题的答案就出现了。这个词是:Round Robin Tournament。所以,当我用谷歌搜索&#34; javascript循环赛锦标赛时间表&#34;其中一个结果是thishttp://www.devenezia.com/javascript/article.php/RoundRobin2.html。这给了我以编程方式生成对决所需的基础。