C#용 들쭉날쭉한 배열

12526 단어 csharp
最近在LeetCode 刷題時,發現一個我不知道的東西—不規則陣列(Jagged Array)

從古自今,筆者對於陣列的認知不外乎就是一維與多維陣列,然而在工作上也從未遇過不規則陣列的使用,導致近日在刷題時,曾度一懷睷睷是不是打錯了?井底之蛙的我馬上跪拜古哥,結果在 C# 程式設計手冊 發現了它的蹤影,廢話不多說,馬上來看!

不規則陣列(Jagged Array)是陣列的一種,其陣列內的元素也是陣列,不規則陣列的元素可以具有不同維度及大小,也是與多維陣列明顗的巰的巰的巰的巙的巰顯

不規則陣列的宣告及初始化

// 不規則陣列的宣告方式
int[][] array = new int[5][];

// 初始化元素
array[0] = new int[6];
array[1] = new int[5];
array[2] = new int[4];
array[3] = new int[3];

// 使用 Initializer 直接填入陣列元素的值,無須設置大小
array[0] = new int[]{ 1, 2, 3 };
array[1] = new int[]{ 4, 6 };
array[2] = new int[]{ 7 };


從上述可知,多維陣列在同一維度下的元素大小必須相同,而不規則陣列的元素大小可以不同,不規則陣列內的元素是陣列,又稱為陣列的陣列的陣列的陣列的陣列的陣列的陣列的陣列的陣列的陣列的陣列的陣列.

我們也可以在宣告時直接初始化元素

// 宣告時直接初始化
int[][] array = new int[][]
{
    new int[]{ 1, 2, 3 },
    new int[]{ 4, 6 },
    new int[]{ 7 }
};

// 或是不使用 new 運算子的縮寫格式
int[][] array =
{
    new int[]{ 1, 2, 3 },
    new int[]{ 4, 6 },
    new int[]{ 7 }
};


其指派值的方式與多維陣列相同

// 指派值 100 到第 [0] 個陣列的第 [1] 個元素
array[0][1] = 100;
// 指派值 100 到第 [1] 個陣列的第 [2] 個元素
array[1][2] = 200;


以上 以上 的 介紹 介紹 一 維不 陣列 陣列 陣列 陣列 陣列 其中 皆 包含 一 一 一 維陣列 的 的 元素. 不 不 規則 陣列 還 可以 可以 使用 使用 的 的 不 規則 規則 陣列 陣列 比如說 比如說 比如說 比如說 比如說 及 初始化 一 維不 陣列 陣列 陣列 陣列 其中 包含 三 三 個 大小 不同 的 的二維陣列元素.

// 宣告及初始化
int[][,] array = new int[3][,]
{
    new int[,]{ {1,2}, {3,4}},
    new int[,]{ {5,6}, {7,8}, {9,10}},
    new int[,]{ {11,12}, {13,14}, {15,18}, {100,220}}
};

// 存取值的方式
Console.WriteLine(array[0][1,0]);
array[0][1,0] = 4;
Console.WriteLine(array[0][1,0]);


以筆者目前的工作性質來說,較不容易使用到不規則陣列,若以遊戲方面來說,我想物品欄應可透過這種方式來存取.

了解多維陣列與不規則陣列的差別後,還有一點很重要,多維陣列在分配空間上,所有元素的長度是固定大小,而不規則陣列的元素長度可以依需求分配,故不規則陣列對於空間利用優於多維陣列.

實際 實際 儲存 儲存 1-5 的 數字 來 看 看 看 看 二 維陣列 對子 對子 元素 元素 的 的 空間 分配 必須 必須 是 相同 長度 長度 長度 故 在 在 存放 存放 存放 存放 存放 存放 未 未 未 未 未 被 被 被 利用 的 的 ; 不 不 規則 就 就 就 就 就 就 就 就 就 就 就 就 就 就 就 就 就 就 就 就 是 是 是 是 是 一 一 一 一 個 個 個 未 未 未 被 被 被 利用 利用 的 的 空間 空間 ; 不 一 一 一 是 是 是 存放 存放 存放 存放 인陣列對子元素的空間分配較彈性,可以完全依照需求長度進行配置,才不會造成空間浪費

// 二維陣列
int[,] arr1 = new int[,]
{ 
    { 1, 2, 3 },
    { 4, 5, 0 } 
};

// 不規則陣列
int[][] arr2 = new int[][]
{
    new int[]{ 1, 2, 3 },
    new int[]{ 4, 5 }
};


用迭代讀出所有元素方法

// 不規則陣列
int[][] arr = new int[][]
{
    new int[]{ 1, 2, 3 },
    new int[]{ 4, 5 }
};

foreach(int[] item in arr)
{
    foreach(int i in item)
    {
        Console.WriteLine(i);
    }
}


也可以使用 SelectMany() 讀取

var item = arr.SelectMany(s => s);

foreach (var i in item)
{
    Console.WriteLine(i);
}



글 읽어주셔서 감사합니다 🌷 🌻 🌼

마음에 드셨다면 주저말고 하트 꾸욱 눌러주세요❤️
또는 내 GitHub ⭐ 팔로우
또는 커피를 사주세요 ⬇️ 감사합니다.

좋은 웹페이지 즐겨찾기