Передайте диапазон диапазонов в функцию с переменным числом - PullRequest
2 голосов
/ 02 июня 2011

Документация Phobos показывает следующий пример диапазонов, переданных в функцию с переменным числом

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 здесь не работает).

1 Ответ

2 голосов
/ 02 июня 2011

если вы не знаете, сколько элементов будет a, вы не сможете развернуть его в кортеж во время компиляции (и, следовательно, передать его в функцию)

, чтобы дляЦикл - ваша лучшая ставка (или реализуйте свой собственный setIntersection, который может принимать различные диапазоны)

...