bestsource

다차원 배열 [][] vs [,]

bestsource 2023. 5. 24. 22:16
반응형

다차원 배열 [][] vs [,]

double[][] ServicePoint = new double[10][9]; // <-- gives an error (1)
double[,] ServicePoint = new double[10,9]; // <-- ok (2)

그들의 차이점은 무엇입니까? (1) 오류가 발생합니다. 그 이유는 무엇입니까?

그리고.

double d = new double[9]
ServicePoint[0] = d;

(2)를 사용하면 오류가 발생합니다. 왜죠?

하나는 배열의 배열이고 하나는 2D 배열입니다.전자는 들쭉날쭉하고 후자는 균일합니다.

즉, a.double[][]다음과 같은 기능을 사용할 수 있습니다.

double[][] x = new double[5][];

x[0] = new double[10];
x[1] = new double[5];
x[2] = new double[3];
x[3] = new double[100];
x[4] = new double[1];

배열의 각 항목은 다음의 배열에 대한 참조이기 때문입니다.double들쭉날쭉한 어레이를 사용하면 두 번째 예와 같이 어레이에 할당할 수 있습니다.

x[0] = new double[13];

두 번째 항목에서는 동일한 2D 배열이기 때문에 행 또는 열에 1D 배열을 할당할 수 없습니다. 행과 열을 모두 인덱싱해야 하기 때문입니다. 이 경우 하나로 압축됩니다.double:

double[,] ServicePoint = new double[10,9];

ServicePoint[0]... // <-- meaningless, a 2d array can't use just one index.

업데이트:

질문 내용을 바탕으로 설명하자면, #1에 구문 오류가 발생한 이유는 다음과 같습니다.

double[][] ServicePoint = new double[10][9];

그리고 시공 시에 두 번째 인덱스를 지정할 수 없습니다.핵심은 ServicePoint가 2d 어레이가 아니라 1d 어레이(어레이)이므로 1d 어레이(어레이)를 생성할 때 인덱스를 하나만 지정해야 한다는 것입니다.

double[][] ServicePoint = new double[10][];

그런 다음 배열에서 각 항목을 생성할 때 각 항목도 배열이므로 치수를 지정할 수 있습니다(따라서 서로 다를 수 있음).

ServicePoint[0] = new double[13];
ServicePoint[1] = new double[20];

첫 번째 인스턴스에서는 jagged 배열이라고 하는 것을 생성하려고 합니다.

double[][] ServicePoint = new double[10][9].

위의 진술이 아래와 같이 정의되었다면 효과가 있었을 것입니다.

double[][] ServicePoint = new double[10][]

즉, 크기가 10인 배열을 만들고 내부에 10개의 서로 다른 크기의 배열을 저장할 수 있습니다.간단히 말하면 어레이의 배열입니다.아래 이미지를 참조하십시오. 이 이미지는 들쭉날쭉한 배열을 나타냅니다.

여기에 이미지 설명 입력

http://msdn.microsoft.com/en-us/library/2s05feca(v=vs.80).aspx

두 번째는 기본적으로 2차원 배열이며 구문은 올바르고 수용 가능합니다.

  double[,] ServicePoint = new double[10,9];//<-ok (2)

그리고 2차원 배열에 액세스하거나 수정하려면 두 차원을 모두 통과해야 하지만, 당신의 경우에는 한 차원만 통과하기 때문에 오류가 발생합니다.

올바른 사용법은 다음과 같습니다.

ServicePoint[0][2],첫 번째 행, 세 번째 열에 있는 항목을 말합니다.

2차원 배열의 그림 표현

여기에 이미지 설명 입력

double[][]jagged 배열이라고 합니다. 내부 치수는 jagged 배열이라고 불립니다.직사각형 배열과 달리 각 내부 배열은 임의의 길이일 수 있습니다.각 내부 배열은 빈 배열이 아닌 null로 암시적으로 초기화됩니다.각 내부 배열은 수동으로 생성해야 합니다. 참조 [C#4.0 in nutshell The final reference]

for (int i = 0; i < matrix.Length; i++)
{
    matrix[i] = new int [3]; // Create inner array
    for (int j = 0; j < matrix[i].Length; j++)
        matrix[i][j] = i * 3 + j;
}

double[,] 다니립라다▁called▁are라고 불립니다.rectangular arrays각 차원을 구분하기 위해 쉼표를 사용하여 선언됩니다.합니다: 음코조직부차 3x32배선까열을언다 0하터의 8초니합기화숫자로.

int [,] matrix = new int [3, 3];
for (int i = 0; i < matrix.GetLength(0); i++)
    for (int j = 0; j < matrix.GetLength(1); j++)
        matrix [i, j] = i * 3 + j;

double[,] 어레이인 반면 2D 어레이는double[][]는 배열의 배열(분할된 배열)이며 구문은 다음과 같습니다.

double[][] ServicePoint = new double[10][];

double[][]과 어의배다니의 입니다.double[,].배열을 초기화하려면 다음 작업을 수행해야 합니다.

double[][] ServicePoint = new double[10][]
for(var i=0;i<ServicePoint.Length;i++)
    ServicePoint[i] = new double[9];

어레이 어레이를 사용하면 길이가 다른 어레이를 사용할 수 있습니다.

ServicePoint[0] = new double[10];
ServicePoint[1] = new double[3];
ServicePoint[2] = new double[5];
//and so on...

언급URL : https://stackoverflow.com/questions/12567329/multidimensional-array-vs

반응형