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
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C #의 구문 {get; set; } 가 의미하는 것 (0) | 2021.12.01 |
---|---|
[C#] int를 문자열로 변환 하는 방법 (0) | 2021.11.24 |
long 형식을 지정하는 printf의 인수 (0) | 2021.11.18 |
Reflection을 사용하여 문자열에서 속성 값 가져 오기 (0) | 2021.11.18 |
std :: vector에 대한 반복 : unsigned 변수와 signed 변수 (0) | 2021.11.17 |