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