D中的矢量符号

时间:2013-02-18 11:45:01

标签: arrays d

我正在玩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;对我来说似乎有些奇怪。

2 个答案:

答案 0 :(得分:4)

第一个问题:你刚忘了左边的[]c[] = d[] + 2;有效。

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

答案 1 :(得分: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;