如何在D中创建二维阵列?

如何在D中创建二维阵列?,d,phobos,D,Phobos,这应该足够简单,但事实并非如此 import std.container, std.stdio; void main(){ alias Array!double _1D; alias Array!_1D _2D; _1D a = _1D(); _2D b = _2D(); a.insert(1.2); a.insert(2.2); a.insert(4.2); b.insert(a); writeln(b[0][]); // prints [1.2,

这应该足够简单,但事实并非如此

import std.container, std.stdio;

void main(){

  alias Array!double _1D;
  alias Array!_1D _2D;

  _1D a = _1D();
  _2D b = _2D();
  a.insert(1.2);
  a.insert(2.2);
  a.insert(4.2);
  b.insert(a);
  writeln(b[0][]);  // prints [1.2, 2.2, 4.2], then throws exception

  _2D c = _2D();
  c.insert(_1D());
  c[0].insert(3.3);
  c[0].insert(2.2);
  c[0].insert(7.7);
  writeln(c[0][]);  // prints []
}

我使用的另一种方法是预先声明动态数组的大小,如下所示:

auto matrix = new double[][](3, 2);  // elements can be appended/removed
尽管有多种不同的方法来实现这一点,这取决于您希望添加元素的任意程度。您当然希望选择最适合您的程序的样式,但这里有一些可能性:

double[][] matrix = [[1.1, 1.2], [2.3, 2.4], [3.5, 3.6]];

最后,如果您知道数组在编译时的大小不会改变,那么您可以创建一个静态数组:

double[2][3] staticMatrix;            // size cannot be changed

这些都使用了自然的内置数组机制。您需要使用数组容器类有什么具体原因吗?

在我看来,他根本没有提出任何疑问。他只是问你是否有使用数组的具体原因。。。“投反对票太苛刻了,伊姆霍。”德扬列基克投反对票是因为他没有回答这个问题。内置数组和数组之间有很大的区别。当然有区别。。。你有权投反对票是的,但我认为不投反对票就足够了
double[][] matrix = new double[][](1,0);
matrix[0].length = 2;
matrix[0][0] = 1.1;
matrix[0][1] = 1.2;

++matrix.length;
matrix[1] ~= 2.3;
matrix[1] ~= 2.4;

matrix ~= new double[](0);
matrix[$-1] ~= [3.5, 3.6];
double[2][3] staticMatrix;            // size cannot be changed