我有5个单词的15个分组。假设第一个分组是'happy'分组,如下:[“ happy”,“ smile”,“ fun”,“ joy”,“ laugh”]],第二个分组是'sad'分组,并且是以下:[“悲伤”,“皱眉”,“冒泡者”,“哭泣”,“雨云”]。所有其他分组都是相似的,每个阵列中有五个单词。
我正在设计一个配对比较react app,我需要从每个分组中随机选择一个单词,然后与从每个分组中随机选择的单词配对。从上面的示例中,用于分组1和2的一对可能是[“ smile”,“ cry”]。总应该有120对(每个分组恰好一对,彼此分组)。
我曾考虑过使用一个循环并逐个进行分组,然后对其余分组中的每个分组,从我正在查看的分组中随机抽取一个单词,从另一个分组中抽取一个随机单词,然后创建一个配对。
我觉得这不是很优雅或高效,我很好奇如何设计更好的算法。我认为递归可能会有所帮助,但我想不出在这种情况下如何使用它。
任何想法或想法?谢谢!
我曾考虑过使用递归,但是很遗憾,我没有想到任何算法。
我在这里尝试的是:当所有集合的列表都不为空时,迭代第一个集合上的每个项目,并将其与其他任何集合中的随机项目配对,然后删除该选定项目。遍历整个第一组后,只需从所有组的列表中删除该第一组即可。这样,就无需进行额外的计算来检查重复项。
let myArray = [["happy", "smile", "fun"],
["sad", "frown", "bummer"],
[1,2,3],
[4,5,6]]
let pairs = []
while (myArray.length != 1){
for (var i = 0; i<myArray[0].length; i++){
var next = myArray[Math.floor(Math.random() * (myArray.length-1)) + 1];
var nextindex = Math.floor(Math.random()*next.length)
pairs.push([myArray [0][i], next[nextindex]]);
next.splice(nextindex, 1)
}
anarray.splice(0, 1);
}
console.log(pairs)
尽管,正如您说的那样,此代码也不是优雅的(也是最有效的)。应该有一个更好的解决方案,因此值得继续思考更好的算法!