C#一維數(shù)組,多維數(shù)組,交錯數(shù)組,三者對比分析
一、數(shù)組核心概念(必考)
1. 數(shù)組定義
數(shù)組是存儲相同類型數(shù)據(jù)的容器,數(shù)組長度固定不可變。
2. 索引(下標(biāo))規(guī)則
索引從 0 開始
數(shù)組長度從 1 開始
最大索引 = 數(shù)組長度 - 1
3. 底層原理
所有數(shù)組都直接或間接繼承自 Array 類,數(shù)組數(shù)據(jù)順序連續(xù)存儲。
4. 數(shù)組最大特點(重中之重)
長度固定,一旦創(chuàng)建不可修改
數(shù)據(jù)在內(nèi)存中 連續(xù)順序存儲
通過 下標(biāo)/索引 操作元素
所有數(shù)組都繼承于 Array 類
二、各類數(shù)組默認(rèn)值(必背)
創(chuàng)建空數(shù)組未賦值時,系統(tǒng)自動填充默認(rèn)值:
int[] → 默認(rèn)值:0
double[] → 默認(rèn)值:0
bool[] → 默認(rèn)值:false
string[] → 默認(rèn)值:null
char[] → 默認(rèn)值:\0 空字符
object[] → 默認(rèn)值:null
三、數(shù)組四種定義+賦值方式(全覆蓋)
1. 先定義、后開辟空長度
int[] ages; ages = new int[10]; // 開辟長度為10的空數(shù)組
2. 指定長度 + 初始化元素
string[] names = new string[5] { "張三", "張三", "張三", "張三", "張三" };規(guī)則:定義的長度必須和大括號元素個數(shù)一致,否則報錯。
3. 不指定長度,自動匹配元素個數(shù)
int[] ages = new int[] { 1, 2, 3 };4. 最簡字面量定義(最常用)
int[] nums = { 1, 2, 3 };四、數(shù)組元素賦值與取值
1. 單個賦值
string[] msgs = new string[100]; msgs[0] = "張三"; msgs[1] = "搜索";
2. 循環(huán)批量賦值
for (int i = 0; i < msgs.Length; i++)
{
msgs[i] = i + "深度";
}msgs.Length:獲取數(shù)組總長度(只讀屬性)
3. 取值
Console.WriteLine(msgs[99]); // 根據(jù)下標(biāo)取值
五、數(shù)組兩種遍歷方式(重點對比)
1. for循環(huán)遍歷
for (int i = 0; i < msgs.Length; i++)
{
Console.WriteLine(msgs[i] + "--------");
}優(yōu)點:可以獲取下標(biāo)i、可以修改數(shù)組元素
2. foreach遍歷
foreach (string item in msgs)
{
Console.WriteLine(item + "++++");
}item:代表數(shù)組中當(dāng)前遍歷的元素,等價于 msgs[i]
3. for 和 foreach 終極區(qū)別(必背)
for:功能強(qiáng)大,可以獲取下標(biāo)、可以修改元素、靈活
foreach:寫法簡單、代碼少
foreach缺點:無法獲取下標(biāo)、不能修改原數(shù)組元素
六、object萬能數(shù)組(了解+必考選擇題)
普通數(shù)組只能存一種類型,object數(shù)組可以存儲任意數(shù)據(jù)類型。
object[] arr = new object[5] { 1, 2, 3, "張三", true };
foreach (object item in arr)
{
Console.WriteLine(item);
}缺點:取出的數(shù)據(jù)都是object類型,需要強(qiáng)制轉(zhuǎn)換才能運算。
輸出數(shù)組名:Console.WriteLine(arr) → 輸出 System.Object[](所有數(shù)組直接打印都輸出類型名)
七、高頻報錯:索引超出數(shù)組界限
string[] msgs = new string[100]; msgs[100] = "ss"; // 報錯!!
報錯原因:長度100,下標(biāo)范圍只能是 0~99,沒有100下標(biāo)。
口訣:下標(biāo)最大=長度-1
八、終極必背總結(jié)(默寫短句)
數(shù)組:固定長度、存同類型、下標(biāo)從0開始
int默認(rèn)0、bool默認(rèn)false、string默認(rèn)null、char默認(rèn)\0
四種數(shù)組定義方式,長度可指定可自動推斷
for可下標(biāo)可修改,foreach簡潔不能下標(biāo)不能改
object數(shù)組萬能存儲,但是需要類型轉(zhuǎn)換
禁止下標(biāo)越界:最大下標(biāo)=長度-1
直接打印數(shù)組名,輸出數(shù)組類型名稱
九、數(shù)組特點+優(yōu)缺點總結(jié)
優(yōu)點
查詢速度快(通過下標(biāo)直接定位)
結(jié)構(gòu)簡單、順序存儲
缺點
長度固定不可擴(kuò)容
增刪數(shù)據(jù)效率低
多維數(shù)組(二維,三維)
一、多維數(shù)組核心概念(必背)
1. 多維數(shù)組:二維及以上數(shù)組統(tǒng)稱多維數(shù)組,是一維數(shù)組的擴(kuò)展,用于存儲結(jié)構(gòu)化、立體化數(shù)據(jù)
2. 維度判定萬能口訣:逗號個數(shù) + 1 = 維度數(shù)
int[,] → 1個逗號 → 二維數(shù)組(行+列,表格結(jié)構(gòu))
int[,,] → 2個逗號 → 三維數(shù)組(塊+行+列,立體結(jié)構(gòu))
3. 通用特性:長度固定、存儲同類型數(shù)據(jù)、下標(biāo)從0開始、內(nèi)存連續(xù)存儲,遵循數(shù)組核心規(guī)則
二、多維數(shù)組兩種定義方式(全覆蓋)
1. 指定維度長度(空數(shù)組,后續(xù)賦值)
語法:數(shù)據(jù)類型[維度1,維度2...] 數(shù)組名 = new 數(shù)據(jù)類型[長度1,長度2...];
int[,] arr2 = new int[2, 3]; // 二維:2行3列 int[,,] arr3 = new int[2, 3, 4];// 三維:2塊、3行、4列
2. 自動推導(dǎo)維度(初始化賦值,無需寫長度)
根據(jù)大括號嵌套層數(shù)、元素個數(shù),自動識別各維度長度
二維數(shù)組初始化案例
int[,] ints = new int[,]
{
{1,2,3 },
{4,5,6},
{7,8,9},
};
// 自動識別:3行3列三維數(shù)組初始化案例
int[,,] ints1 = new int[,,]
{
{ {1,2,3}, {1,2,3} },
{ {1,2,113}, {1,2,339} }
};
// 自動識別:2塊、2行、3列
三、多維數(shù)組五大核心屬性/方法(必考)
所有多維數(shù)組通用,是遍歷、取值的核心依據(jù)
Rank:獲取數(shù)組維度數(shù)(二維返回2,三維返回3)
Length:獲取數(shù)組總元素個數(shù)(32位整型)
LongLength:獲取數(shù)組總元素個數(shù)(64位整型,適配超大數(shù)組)
GetLength(n):獲取指定維度的長度(最常用)
維度索引對應(yīng)規(guī)則(死記)
二維數(shù)組:GetLength(0)=行數(shù) 、 GetLength(1)=列數(shù)
三維數(shù)組:GetLength(0)=塊數(shù) 、 GetLength(1)=行數(shù) 、 GetLength(2)=列數(shù)
所有維度下標(biāo):從0開始,最大下標(biāo)=維度長度-1
完整測試代碼
string[,] strings = new string[,]
{
{"孫悟空","豬八戒","沙和尚" },
{"劉備","曹操","孫權(quán)" },
{"宋江","林沖","吳用" },
{"賈寶玉","林黛玉","薛寶釵"}
};
Console.WriteLine(strings.Rank); // 2(二維數(shù)組)
Console.WriteLine(strings.Length); // 12(總元素數(shù))
Console.WriteLine(strings.GetLength(0)); // 4(行數(shù))
Console.WriteLine(strings.GetLength(1)); // 3(列數(shù))
四、多維數(shù)組取值 & 賦值
1. 取值語法
二維:數(shù)組[行下標(biāo), 列下標(biāo)]
三維:數(shù)組[塊下標(biāo), 行下標(biāo), 列下標(biāo)]
Console.WriteLine(strings[0, 0]); // 孫悟空 Console.WriteLine(strings[3, 1]); // 林黛玉 Console.WriteLine(ints1[1, 1, 2]); // 339
2. 賦值語法
五、多維數(shù)組兩種遍歷方式(大題必考)
1. 嵌套for循環(huán)(精準(zhǔn)遍歷,可改值、可定位)
適用場景:需要區(qū)分行列、修改元素、精準(zhǔn)操作數(shù)據(jù)
外層循環(huán):遍歷第一維度(行/塊),內(nèi)層循環(huán):遍歷第二、三維度(列)
// 二維數(shù)組雙層for遍歷
for (int i = 0; i < strings.GetLength(0); i++) // 遍歷所有行
{
for (int j = 0; j < strings.GetLength(1); j++) // 遍歷當(dāng)前行所有列
{
Console.Write(strings[i, j] + " ");
}
Console.WriteLine(); // 換行,分行展示
}
2. foreach遍歷(簡潔快速,只讀遍歷)
特性:無視所有維度,直接平鋪遍歷數(shù)組所有元素
缺點:無法獲取行列下標(biāo)、不能修改原數(shù)組元素
foreach (var item in strings)
{
Console.WriteLine(item);
}
六、動態(tài)批量賦值(空多維數(shù)組填充數(shù)據(jù))
場景:定義空多維數(shù)組,通過嵌套循環(huán)批量賦值
string[,] names = new string[5, 10]; // 5行10列空數(shù)組
for (int i = 0; i < names.GetLength(0); i++)
{
for (int j = 0; j < names.GetLength(1); j++)
{
names[i, j] = $"行:{i} 列:{j}";
}
}
Console.WriteLine(names[3, 9]); // 讀取指定位置數(shù)據(jù)
七、經(jīng)典定點賦值案例(考試??迹?/h3>
需求:初始化二維數(shù)組,指定 arr[0,3]=10、arr[1,2]=20、arr[2,2]=30,其余元素為0
int[,] ints2 = new int[,]
{
{0,0,0,10},
{0,0,20,0 },
{0,0,30,0 }
};
八、拓展:多維數(shù)組+隨機(jī)數(shù)實戰(zhàn)(隨機(jī)取值)
利用隨機(jī)數(shù)生成合法下標(biāo),隨機(jī)讀取數(shù)組元素,高頻實操考點
string[] xings = {"趙","錢","孫","李","諸葛","夏侯","東方","歐陽"};
string[] names1 = { "亮", "娜娜", "月初", "惇", "匡胤", "多多", "權(quán)", "世民" };
Random rnd = new Random();
// 隨機(jī)生成合法下標(biāo):0 ~ 數(shù)組長度-1
int index1 = rnd.Next(0, xings.Length);
int index2 = rnd.Next(0, names1.Length);
Console.WriteLine(xings[index1] + names1[index2]);
九、多維數(shù)組 高頻易錯點(扣分避坑)
1. 多維數(shù)組下標(biāo)格式:[行,列],不能寫成 [i][j](和其他語言區(qū)別)
2. 遍歷多維數(shù)組,禁止用數(shù)組名.Length做循環(huán)條件,必須用 GetLength(維度)
3. 下標(biāo)越界:任意維度下標(biāo),最大取值 = 該維度長度 - 1
4. foreach遍歷多維數(shù)組,無法區(qū)分行列,只能讀取不能修改
5. 多維數(shù)組初始化,每行元素個數(shù)必須一致,否則編譯報錯
6. 直接打印多維數(shù)組名,輸出系統(tǒng)類型名,不會輸出元素
十、終極默寫短句(考前速記)
維度判定:逗號個數(shù)+1=維度數(shù)
Rank取維度數(shù),Length取總元素數(shù),GetLength取單維度長度
二維0維是行、1維是列,三維0塊1行2列
嵌套for可遍歷可改值,foreach平鋪只讀無下標(biāo)
多維下標(biāo)逗號分隔,禁止多括號寫法
所有維度下標(biāo)從0開始,最大下標(biāo)=維度長度-1
交錯數(shù)組
一、交錯數(shù)組核心概念(必考)
1. 定義
交錯數(shù)組也叫鋸齒數(shù)組:大數(shù)組里面存放的每一個元素,都是一個獨立的小數(shù)組。
2. 最核心特點(區(qū)別多維數(shù)組)
交錯數(shù)組:每一個內(nèi)層小數(shù)組的長度可以不相同(長短不一、參差不齊)
多維數(shù)組:每一行/列長度必須完全一致(規(guī)規(guī)矩矩的表格)
二、語法格式(必背)
1. 二維交錯數(shù)組語法
格式:數(shù)據(jù)類型[][] 數(shù)組名
多個中括號:每一個中括號代表一層數(shù)組
int[][] → 兩層交錯數(shù)組(數(shù)組套數(shù)組)
int[][][] → 三層交錯數(shù)組
2. 完整初始化方式
// 先定義多個長度不同的一維數(shù)組
int[] i1s = new int[4] { 1, 2, 3, 4 }; // 長度4
int[] i2s = new int[] { 1, 2, 3, 4, 5 }; // 長度5
// 外層大數(shù)組,存放不同長度的小數(shù)組
int[][] ints = new int[][]
{
i1s,
i2s,
new int[]{1,2,3,4,5,999} // 長度6
};核心特征:內(nèi)層數(shù)組長度 4、5、6 完全不統(tǒng)一,這就是交錯數(shù)組。
三、交錯數(shù)組 取值 & 賦值
1. 分步取值
先取出內(nèi)層數(shù)組,再取數(shù)組內(nèi)元素
int[] arr = ints[1]; // 取出第2個內(nèi)層數(shù)組(i2s) int a = arr[4]; // 取出該數(shù)組下標(biāo)4的元素 Console.WriteLine(a);
2. 一鍵取值(常用)
數(shù)組[外層下標(biāo)][內(nèi)層下標(biāo)]
Console.WriteLine(ints[2][5]); // 999
3. 修改元素值
ints[1][2] = 888; // 修改指定外層、內(nèi)層下標(biāo)元素
四、交錯數(shù)組兩種遍歷方式(大題必考)
1. 雙層 for 循環(huán)遍歷(重點)
外層循環(huán):遍歷外層大數(shù)組(ints.Length)
內(nèi)層循環(huán):遍歷每一個內(nèi)層小數(shù)組(ints[i].Length)
?? 重點:內(nèi)層長度不能寫死,必須用 ints[i].Length(因為每個數(shù)組長度不一樣)
for (int i = 0; i < ints.Length; i++)
{
Console.WriteLine("當(dāng)前內(nèi)層數(shù)組長度:" + ints[i].Length);
for (int j = 0; j < ints[i].Length; j++)
{
Console.WriteLine($"({i}:{j}={ints[i][j]})");
}
}2. 雙層 foreach 遍歷
外層遍歷:取出每一個內(nèi)層數(shù)組
內(nèi)層遍歷:取出當(dāng)前數(shù)組的每一個元素
foreach (int[] item in ints)
{
foreach (int item1 in item)
{
Console.WriteLine(item1 + "+++++++");
}
}五、交錯數(shù)組必背易錯點
1. 交錯數(shù)組是多括號 [][],多維數(shù)組是逗號 [,],語法絕對不能混
2. 交錯數(shù)組最大特點:內(nèi)層數(shù)組長度可以不同
3. 遍歷交錯數(shù)組內(nèi)層,必須使用ints[i].Length,不能寫固定值
4. 取值格式:[外層下標(biāo)][內(nèi)層下標(biāo)],不是逗號格式
5. 多維數(shù)組是一個整體表格;交錯數(shù)組是數(shù)組集合,每個元素是獨立數(shù)組
六、終極默寫短句(考前速記)
交錯數(shù)組數(shù)組套數(shù)組,雙層括號[][],長度參差不齊
多維數(shù)組逗號[,],規(guī)則表格,行列長度統(tǒng)一
交錯取值雙層下標(biāo),多維取值逗號分隔
交錯遍歷內(nèi)層長度隨數(shù)組變化,不能寫死
三種數(shù)組終極對比總結(jié)(一維、二維、交錯)
// 1. 一維數(shù)組:單組數(shù)據(jù)
int[] arr1 = new int[3] { 1, 2, 3 };
// 2. 二維多維數(shù)組:規(guī)則表格、長寬統(tǒng)一
int[,] arr2 = new int[,]
{
{1,2,3},
{4,5,6}
};
// 3. 二維交錯數(shù)組:數(shù)組套數(shù)組、長度隨意
int[][] arr3 = new int[][]
{
new int[]{1,2},
new int[]{3,4,5,6}
};
第一部分:三大數(shù)組終極對比(考試簡答題滿分)
1. 語法區(qū)別
一維數(shù)組:[]
多維數(shù)組:[,] 逗號分隔、規(guī)則表格
交錯數(shù)組:[][] 多括號嵌套、不規(guī)則鋸齒
2. 結(jié)構(gòu)區(qū)別
多維數(shù)組:所有行列長度統(tǒng)一,整體表格
交錯數(shù)組:每行長度可以不一樣,數(shù)組嵌套數(shù)組
3. 取值區(qū)別
多維:[行,列]
交錯:[外層][內(nèi)層]
4. 長度獲取區(qū)別
多維數(shù)組:GetLength(維度)
交錯數(shù)組:外層.Length / 內(nèi)層[i].Length
第二部分:數(shù)組全套易錯點匯總(滿分避坑)
1. 數(shù)組長度固定,不支持?jǐn)U容
2. 所有下標(biāo)遵循:最大下標(biāo) = 長度 - 1,禁止越界
3. 一維遍歷用 Length,多維遍歷必須用 GetLength()
4. 多維逗號[,]、交錯雙括號[][],語法絕對不能混用
5. 交錯數(shù)組內(nèi)層長度不統(tǒng)一,遍歷必須動態(tài)獲取長度
6. foreach 遍歷所有數(shù)組都是只讀,不能修改原數(shù)據(jù)
7. 直接打印數(shù)組名輸出類型,不輸出元素
第三部分:終極默寫短句(考前速記)
數(shù)組固定長度存同類,下標(biāo)從零起,最大長度減一
數(shù)值默認(rèn)0,布爾false,字符串null,字符空
for帶下標(biāo)可改值,foreach簡潔只讀無下標(biāo)
多維逗號規(guī)則表,行列長度都統(tǒng)一
交錯括號數(shù)組套,內(nèi)層長度不統(tǒng)一
多維取值逗號隔,交錯取值雙層括
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Unity編輯器選擇器工具類Selection常用函數(shù)示例詳解
這篇文章主要為大家介紹了Unity編輯器選擇器工具類Selection常用函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
C# WPF實現(xiàn)頁面跳轉(zhuǎn)的兩種方法介紹
在 C# WPF 中,頁面跳轉(zhuǎn)通常有兩種主要方式:使用 NavigationWindow+Page或在 Window 中切換 UserControl,下面我們來看看具體實現(xiàn)方法吧2025-10-10

