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