2012-01-06 2 views
2

이것은 충분히 간단해야하지만 그렇지 않습니다.D에서 2D Array를 만드는 방법은 무엇입니까?

auto matrix = new double[][](3, 2); // elements can be appended/removed 

다양한 방법이 비록이 방법에 따라 수행 할 다음과 같이

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 [] 
} 
+0

나에게 버그처럼 보입니다. – Trass3r

답변

2

I 미리 동적 배열의 사이즈를 선언 this question로 내로 흘려 주기도하고 다른 방법은 임의로 요소를 추가하려고합니다. 당신은 물론 당신의 프로그램에 가장 적합한 중 스타일을 선택하는 것이 좋습니다,하지만 여기에 몇 가지 가능성이 있습니다 :

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

또는

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

또는

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 

이들은 모두 자연 내장 배열 메커니즘을 사용합니다. Array 컨테이너 클래스를 사용해야하는 특별한 이유가 있습니까?

+0

그는 전혀 질문하지 않는 것 같아요. 그는 단순히 Array를 사용하는 구체적인 이유가 있는지 물어 보았습니다 ... Down-vote는 너무 가혹합니다. – DejanLekic

+0

@DejanLekic 다운 투표는 그에게 질문에 대답하지 않는 것이 었습니다. 내장 배열과 배열 간에는 큰 차이가 있습니다. – Arlen

+0

물론 차이가 있습니다 ... 네가 downvote하는 것은 귀하의 권리이지만, 나는 투표를하지 않는 것이 충분히 처벌이라고 믿습니다. :) – DejanLekic

관련 문제