1

我正在玩 D 数组,我偶然发现了这个:

当我编译这段代码

import std.stdio;

int main()
{
  int[] a, b;
  b ~= [2,3,4,5];
  a.length = b.length;
  a[] = b[] + 4;
  writeln(typeid(a),"\n",typeid(b));
  writeln(a,"\n",b);

  int[] c, d;  
  for (int n=10; n<20; ++n) {
    d ~= n;

  }
  c.length = d.length;
  c = d[] + 2;  //compile error
  writeln(typeid(c),"\n",typeid(d));
  writeln(c,"\n",d);

  return 0;
}

编译时出现错误:

Error: Array operation d[] + 2 not implemented

前几行与其余行之间的唯一区别是填充 b 和 d 的方式。

如何在循环中填充数组时使用数组操作?

还有一个问题:

前几行是正确的方法吗?这条线a.length = b.length;对我来说似乎有点奇怪。

4

2 回答 2

4

第一个问题:你只是忘[]了左边。c[] = d[] + 2;作品。

第二个问题:是的;矢量运算需要大小相等的数组,而设置.length是调整数组大小的一种方法。

于 2013-02-18T12:02:25.183 回答
4

前几行与其余行之间的唯一区别是填充 b 和 d 的方式。

不,不是。仔细看。

a[] = b[] + 4;
c = d[] + 2;  //compile error

至于这个:

int[] a, b;
b ~= [2,3,4,5];
a.length = b.length;
a[] = b[] + 4;

你也可以这样做:

int[] a = new int[4];
int[] b = [2, 3, 4, 5];
a[] = b[] + 4;
于 2013-02-18T12:03:41.943 回答