프로그래밍 언어/C++

C #에서 배열과 다차원 배열의 차이점

Rateye 2021. 11. 23. 10:11
728x90
반응형
질문 : C #에서 다차원 배열과 배열 배열의 차이점은 무엇입니까?

C #에서 double[,] 과 array-of-arrays double[][] 의 차이점은 무엇입니까?

차이가 있다면 각각에 가장 적합한 용도는 무엇입니까?

답변

배열 배열 (들쭉날쭉 한 배열)은 다차원 배열보다 빠르며 더 효과적으로 사용할 수 있습니다. 다차원 배열에는 더 좋은 구문이 있습니다.

들쭉날쭉하고 다차원 배열을 사용하여 간단한 코드를 작성한 다음 IL 디스어셈블러로 컴파일 된 어셈블리를 검사하면 들쭉날쭉 한 (또는 1 차원) 배열에서 저장 및 검색이 단순한 IL 명령어 인 반면 다차원 배열에 대한 동일한 작업은 메서드임을 알 수 있습니다. 항상 느린 호출.

다음 방법을 고려하십시오.

static void SetElementAt(int[][] array, int i, int j, int value)
{
    array[i][j] = value;
}

static void SetElementAt(int[,] array, int i, int j, int value)
{
    array[i, j] = value;
}

그들의 IL은 다음과 같습니다.

.method private hidebysig static void  SetElementAt(int32[][] 'array',
                                                    int32 i,
                                                    int32 j,
                                                    int32 'value') cil managed
{
  // Code size       7 (0x7)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  ldarg.1
  IL_0002:  ldelem.ref
  IL_0003:  ldarg.2
  IL_0004:  ldarg.3
  IL_0005:  stelem.i4
  IL_0006:  ret
} // end of method Program::SetElementAt

.method private hidebysig static void  SetElementAt(int32[0...,0...] 'array',
                                                    int32 i,
                                                    int32 j,
                                                    int32 'value') cil managed
{
  // Code size       10 (0xa)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  ldarg.1
  IL_0002:  ldarg.2
  IL_0003:  ldarg.3
  IL_0004:  call       instance void int32[0...,0...]::Set(int32,
                                                           int32,
                                                           int32)
  IL_0009:  ret
} // end of method Program::SetElementAt

들쭉날쭉 한 배열을 사용하면 행 교체 및 행 크기 조정과 같은 작업을 쉽게 수행 할 수 있습니다. 경우에 따라 다차원 배열을 사용하는 것이 더 안전 할 수 있지만 Microsoft FxCop조차도 프로젝트를 분석하는 데 사용할 때 다차원 배열 대신 들쭉날쭉 한 배열을 사용해야한다고 말합니다.

출처 : https://stackoverflow.com/questions/597720/what-are-the-differences-between-a-multidimensional-array-and-an-array-of-arrays
728x90
반응형