Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Analyse der C#-Array-Initialisierung

Eine kurze Analyse der C#-Array-Initialisierung

高洛峰
高洛峰Original
2016-12-16 14:42:421485Durchsuche

Es gibt immer verschiedene Überraschungen und Schocks! Das C#-Array ist eines davon und ich betrachte es als meinen ersten Blog.
C#-Arrays unterscheiden sich stark von anderen Sprachen der C-Serie. Als ich in der Vergangenheit mit ihnen in Kontakt kam, gab es große Unterschiede im Verständnis. Insbesondere das Verständnis mehrdimensionaler Arrays. Mehrdimensionale Arrays sind im Vergleich zur C-Sprache ein neues Konzept. Am Anfang
habe ich es als eine besondere Art von gezacktem Array betrachtet.

Konzentrieren Sie sich zunächst auf die Initialisierung und den Zugriff auf zweidimensionale Arrays und einfache verschachtelte Arrays

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不能修改变量。

Und verschachtelte Arrays können auch ähnliche Inhalte erzielen

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); 
} 
}

Multi -dimensionale Arrays Die gespeicherten Daten können durch ein gezacktes Array ersetzt werden. Ein Jagged-Array ist ein spezielles Array mit hohen Abmessungen. Und ein Jagged-Array ist ein Array von Arrays. Und Arrays haben eine sehr wichtige Eigenschaft:
Die im Array gespeicherten Elemente müssen vom gleichen Typ sein! Dies ist wichtig für das Verständnis verschiedener komplexer Arrays.
Komplexes verschachteltes Array

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} 
} 
};

Wir müssen so initialisieren. Da es sich bei verschachtelten Arrays um Arrays von Arrays handelt, haben wir sie schon immer verschachtelt. Es werden jedoch viele Array-Typen benötigt und es können unzählige Array-Typen erstellt werden.

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][] 是相同的类型,所以我们创建存储结构不一致的数组

Der nächste ist der komplexeste Typ. Mischen Sie gezackte Arrays mit mehrdimensionalen Arrays. Wenn Sie das Array unten initialisieren können, sollten Sie es besser verstehen!
bool [][,,][][,,][]Foo
Ich habe einen einfachen Punkt als Beispiel gewählt: bool [][,][]Foo;

Es sollte jetzt klarer sein. Ich weiß nicht, ob das jeder Programmierer versteht, aber ich habe viel Zeit gebraucht, um es zu verstehen.
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
Berücksichtigen Sie abschließend die Auswirkungen auf Array-Methoden. Besonders Clear();
//定义交错数组:一维数组存放(二维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#编译器生成的名字与我们声明的是倒着的。理解起来应该也没差异吧


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

Weitere Artikel zur C#-Array-Initialisierung finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn