2011-06-02 170 views
2

的火衛一的文檔顯示傳遞給可變參數函數傳遞一個範圍範圍的可變參數函數

int[] a = [ 1, 2, 4, 5, 7, 9 ]; 
int[] b = [ 0, 1, 2, 4, 7, 8 ]; 
int[] c = [ 0, 1, 4, 5, 7, 8 ]; 
assert(equal(setIntersection(a, a), a)); 
assert(equal(setIntersection(a, b), [1, 2, 4, 7][])); 
assert(equal(setIntersection(a, b, c), [1, 4, 7][])); 

但如果你有一系列範圍的下列範圍例子,你不知道在提前多少元素它包含像

int[][] a = [[1,2,3,4],[1,2,4,5],[1,3,4,5]]; 

我能想到的唯一的事情就是

if (a.length > 1) { 
    auto res = array(setIntersection(a[0], a[1])); 
    for (int i = 2; i < a.length; i++) 
     res = array(setIntersection(res, a[i])); 
    writeln(res); 
} 

哪些工作。但我希望能夠直接將參數傳遞給函數,比如setIntersection(a.tupleof)或類似的東西(我知道tupleof在這裏不起作用)。

回答

2

,如果你不知道有多少元素a將你將不能夠把它擴展到在編譯時的元組(並因此它傳遞到一個函數)

,這樣的循環是你的最好的選擇(或實施你自己的setIntersection,可以採取一系列的範圍)