2014-01-22 44 views
3

如果我有一個數組,names = ['Jon', 'Stewart', 'Oliver'],我想所有3元組和2元組:如何從JavaScript中的數組創建元組?

Jon, Stewart, Oliver 
Jon, Stewart 
Stewart, Oliver 
Oliver, Jon 

我可以使用哪些算法呢?該數組也可以是非常大的(200+項),所以無論我使用的代碼本質上應該是異步的。

+0

聽起來像(亞馬遜/微軟/谷歌/臉譜/等)面試問題。 – EkoostikMartin

+0

您可能正在尋找[組合](http://en.wikipedia.org/wiki/Combination);你可以找到很多方法在互聯網上以多種語言實現它們。 – maerics

+0

@EkoostikMartin - 哈哈 - 我明白了你的觀點。但是,唉,這裏不是這種情況。 – Shamoon

回答

3

我想你可能會在這裏混淆「異步」。創建元組的過程將始終阻塞。所以可能你想要做的是創建一個算法,它僅在需要時根據一些參數生成元組,然後將其緩存以備後用。

由於您已將此標記爲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