有没有更好的方法来迭代多维数组?

时间:2011-02-19 07:24:08

标签: multidimensional-array d

我有一个动态的3d数组,目前我正在按照我通常在C中的方式进行操作:

for (auto i = 0; i < size; i++) {
    for (auto j = 0; j < size; j++) {
        for (auto k = 0; k < size; k++) {
            ...
        }
    }
}

看起来很难看。 D中是否有更短,也许更“优雅”的方式?

2 个答案:

答案 0 :(得分:9)

使用foreach可能是D中最惯用的方法。可以仅通过索引和值或值进行迭代。

import std.stdio;

void main () {

auto arr3 = [ [[1 ,2 ,3 ]], [[4 ,5 ,6 ]], [[7 , 8, 9]], 
              [[11,12,13]], [[14,15,16]], [[17,18,19]] ];

    foreach (index3, arr2; arr3)
    foreach (index2, arr1; arr2)
    foreach (index1, val ; arr1) {
        assert (val == arr3[index3][index2][index1]);
        writeln (val);
    }
}

答案 1 :(得分:0)

import std.array;

    foreach(el;join(join(arr3))){
        writeln (el);
    }

但是这样你就无法区分你访问哪个较低的数组(除非你在连接函数中添加一个分隔符作为第二个参数)