3
如果我有一个数组,names = ['Jon', 'Stewart', 'Oliver']
,我想所有3元组和2元组:如何从JavaScript中的数组创建元组?
Jon, Stewart, Oliver
Jon, Stewart
Stewart, Oliver
Oliver, Jon
我可以使用哪些算法呢?该数组也可以是非常大的(200+项),所以无论我使用的代码本质上应该是异步的。
如果我有一个数组,names = ['Jon', 'Stewart', 'Oliver']
,我想所有3元组和2元组:如何从JavaScript中的数组创建元组?
Jon, Stewart, Oliver
Jon, Stewart
Stewart, Oliver
Oliver, Jon
我可以使用哪些算法呢?该数组也可以是非常大的(200+项),所以无论我使用的代码本质上应该是异步的。
我想你可能会在这里混淆“异步”。创建元组的过程将始终阻塞。所以可能你想要做的是创建一个算法,它仅在需要时根据一些参数生成元组,然后将其缓存以备后用。
由于您已将此标记为node.js,因此我将假定这是感兴趣的编程语言。基于这个假设,假设你实际上不希望被阻塞,你最好的办法是产生多个进程,并产生创建这些元组的进程。这里是一个非常粗略的示例脚本(强调粗糙):
var cluster = require('cluster');
var names = ['Jon', 'Stewart', 'Oliver'];
if (cluster.isWorker) {
var count = +process.env.tupple_count;
var tuples = [];
// Process tuple here, then return it.
process.send(JSON.stringify(tuples));
return;
}
cluster.fork({ tupple_count: 2 }).on('message', function(msg) {
// Receive tuple here:
var tuple = JSON.parse(msg);
console.log(tuple);
});
// Go about my life.
然后,你可以写一个通用算法返回这些。这里有一个很好的链接如何做到这一点:Algorithm to return all combinations of k elements from n
听起来像(亚马逊/微软/谷歌/脸谱/等)面试问题。 – EkoostikMartin
您可能正在寻找[组合](http://en.wikipedia.org/wiki/Combination);你可以找到很多方法在互联网上以多种语言实现它们。 – maerics
@EkoostikMartin - 哈哈 - 我明白了你的观点。但是,唉,这里不是这种情况。 – Shamoon