>  기사  >  백엔드 개발  >  C# 배열 초기화에 대한 간략한 분석

C# 배열 초기화에 대한 간략한 분석

高洛峰
高洛峰원래의
2016-12-16 14:42:421532검색

항상 다양한 놀라움과 충격이 있습니다! C# 배열은 그 중 하나이며, 저의 데뷔 블로그라고 생각합니다.
C# 배열은 다른 C 시리즈 언어와 매우 다릅니다. 예전에 접했을 때 이해하는 데 큰 차이가 있었습니다. 특히 다차원 배열에 대한 이해가 필요합니다. 다차원 배열은 C 언어에 비해 새로운 개념입니다. 처음에는
특별한 형태의 들쭉날쭉한 배열로 여겼습니다.

첫째, 2차원 배열과 간단한 인터리브 배열의 초기화 및 액세스에 중점을 둡니다.

int[,] nums={ 
{1,2,3}, 
{1,2,0} 
}; 
for (int i = nums.GetLowerBound(0); i <= nums.GetUpperBound(0); i++) 
{ 
for (int j = nums.GetLowerBound(1); j <= nums.GetUpperBound(1); j++) 
{ 
Console.WriteLine(nums[i,j]); 
Console.WriteLine(nums.GetValue(i,j)); 
} 
} 
foreach (var num in nums) 
{ 
Console.WriteLine(num); 
} 
//对任意维度的数组,都可以这样快速访问,只是foreach不能修改变量。

인터리브 배열도 비슷한 내용을 얻을 수 있습니다.

int[][] nums2 ={ 
new int[]{1,2,3}, 
new int[]{1,2,0} 
}; 
for (int i = nums2.GetLowerBound(0); i <= nums2.GetUpperBound(0); i++) 
{ 
for (int j = nums2[i].GetLowerBound(0); j <= nums2[i].GetUpperBound(0); j++) 
{ 
Console.WriteLine(nums2[i][j]); 
} 
} 
foreach (var ia in nums2) 
{ 
foreach (var i in ia) 
{ 
Console.WriteLine(i); 
} 
}

멀티 -차원 배열 저장된 데이터는 들쭉날쭉한 배열로 대체될 수 있습니다. 들쭉날쭉한 배열은 차원이 높은 특수 배열입니다. 들쭉날쭉한 배열은 배열의 배열입니다. 그리고 배열에는 매우 중요한 속성이 있습니다.
배열에 저장된 항목은 동일한 유형이어야 합니다! 이는 다양한 복잡한 배열을 이해하는 데 중요합니다.
복잡한 인터리브 배열

bool[][][] cells31 = new bool[2][][] 
{ 
new bool[2][] 
{ 
new bool[] {false}, 
new bool[] {true} 
}, 
new bool[3][] 
{ 
new bool[] {false}, 
new bool[] {true}, 
new bool[] {true} 
} 
};

이렇게 초기화해야 합니다. 새로운 것이 많이 있습니다. 인터리브 배열은 배열의 배열이므로 이전에는 항상 중첩했습니다. 그러나 배열 유형이 많이 필요하며 셀 수 없이 많은 배열 유형이 생성될 수 있습니다.

Console.WriteLine("交错数组类型"); 
Console.WriteLine(cells31[0].GetType()); 
Console.WriteLine(cells31[0][0].GetType()); 
Console.WriteLine(cells31[0][0][0].GetType()); 
//交错数组类型 
//System.Boolean[][] 
//System.Boolean[] 
//System.Boolean 
//这是交错数组里面的类型。 
// bool[2][] 与boo[3][] 是相同的类型,所以我们创建存储结构不一致的数组

다음은 가장 복잡한 유형입니다. 들쭉날쭉한 배열과 다차원 배열을 혼합합니다. 아래 배열을 초기화할 수 있다면 좀 더 철저하게 이해할 수 있을 것입니다!
bool [][,,][][,,][]Foo;
예로 간단한 점을 선택했습니다. bool [][,][]Foo

bool[][,][] Foo = new bool[1][,][] 
{ 
new bool[2,2][] 
{ 
{ 
new bool[2] {false, true}, 
new bool[2] {false, true} 
}, 
{ 
new bool[2] {false, true}, 
new bool[2] {false, true} 
} 
} 
}; 
Console.WriteLine("混合数组类型"); 
Console.WriteLine(Foo.GetType()); 
Console.WriteLine(Foo[0].GetType()); 
Console.WriteLine(Foo[0][0,0].GetType()); 
Console.WriteLine(Foo[0][0, 0][0].GetType()); 
//结果 混合数组类型 
//system.boolean[][,][] 
//system.boolean[][,] 
//system.boolean[] 
//system.boolean
//定义交错数组:一维数组存放(二维int数组存放(一维int数组存放(四维int数组))) 
//标准的C#定义描述 array of( multi-array of( array of (nulti-array))) 
int[][,][][, , ,] arr = new int[10][,][][,,,]; 
//初始化 二维int数组存放(一维int数组存放(四维int数组)) 
arr[4] = new int[1, 2][][,,,]; 
//初始化 一维int数组存放(四维int数组) 
arr[4][0, 1] = new int[3][, , ,]; 
//初始化 四维int数组 
arr[4][0, 1][2] = new int[1, 2, 3, 4]; 
Console.WriteLine(arr.GetType()); 
Console.WriteLine(arr[4].GetType()); 
Console.WriteLine(arr[4][0, 1].GetType()); 
Console.WriteLine(arr[4][0, 1][2].GetType()); 
//System.Int32[,,,][][,][] 
//System.Int32[,,,][][,] 
//System.Int32[,,,][] 
//System.Int32[,,,] 
//C#编译器生成的名字与我们声明的是倒着的。理解起来应该也没差异吧

이제 좀 더 명확해졌을 겁니다. 모든 프로그래머가 이것을 이해할지는 모르겠지만, 나는 그것을 이해하는 데 많은 시간이 걸렸습니다.
마지막으로 배열 방법에 미치는 영향을 고려하세요. 특히 Clear();

Console.WriteLine(Foo[0][0,0][0]); 
//输出为Flase 
Array.Clear(Foo,0,1); 
Console.WriteLine(Foo[0][0, 0][0]); 
//这里会引发空引用异常。因为 bool[][,]的类型的值已经变为null。


더 많은 C# 배열 초기화 간략 분석 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.