前言
本篇文章將會介紹陣列的排列、反轉、清除、擴增等方法,能協助程式員在撰寫程式時的操作,並會介紹字元相關的方法。
陣列(Array)
陣列可以儲存值的序列,當陣列中有資料,即可操控陣列順序和內容,有一些陣列協助程式的方法,執行字串作業,此類別包含操控陣列內容、排列與大小方法。
排列(Array.Sort(name);)
string[] pallets = { "B14", "A11", "B12", "A13" };
Console.WriteLine("Sorted...");
Array.Sort(pallets);
foreach (var pallet in pallets)
{
Console.WriteLine($"-- {pallet}");
}
重點關注Array.Sort(pallets);,用來以英數字元順序排列陣列中的項目。
Sorted...
-- A11
-- A13
-- B12
-- B14
反轉(Array.Reverse())
string[] pallets = { "B14", "A11", "B12", "A13" };
Console.WriteLine("Sorted...");
Array.Sort(pallets);
foreach (var pallet in pallets)
{
Console.WriteLine($"-- {pallet}");
}
Console.WriteLine("");
Console.WriteLine("Reversed...");
Array.Reverse(pallets);
foreach (var pallet in pallets)
{
Console.WriteLine($"-- {pallet}");
}
將用Array.Reverse(pallets); 來反轉項目順序,以下為官方的輸出:
Sorted...
-- A11
-- A13
-- B12
-- B14
Reversed...
-- B14
-- B12
-- A13
-- A11
清除(Array.Clear())
string[] pallets = { "B14", "A11", "B12", "A13" };
Console.WriteLine("");
Array.Clear(pallets, 0, 2);
Console.WriteLine($"Clearing 2 ... count: {pallets.Length}");
foreach (var pallet in pallets)
{
Console.WriteLine($"-- {pallet}");
}
關注核心程式碼 Array.Clear(pallets,0,2); ,這項程式碼的意思是:再pallets中,從0開始清除兩個元素,這些值會存在,不會為空字串。
Clearing 2 ... count: 4
--
--
-- B12
-- A13
空字串與Null的比較
Clear清除的元素不再參考記憶體中的字串,元素不會指向任何東西,這是新手不容易掌控的區別。
呼叫清除的元素
例如Clear清除後的陣列項目為Null,在這種情況下使用方法(像是ToLower()),會出現較大的錯誤訊息,例外狀況的原因是我們嘗試在 C# 編譯器隱含地將 Null 轉換為空字串之前就嘗試在陣列中的元素的內容上呼叫方法。
因此需要在可能存取Null值的陣列元素前新增一項 if 判斷式。
if (pallets[0] != null)
Console.WriteLine($"After: {pallets[0].ToLower()}");
擴增(Array.Resize(ref pallets,6);)
string[] pallets = { "B14", "A11", "B12", "A13" };
Console.WriteLine("");
Array.Clear(pallets, 0, 2);
Console.WriteLine($"Clearing 2 ... count: {pallets.Length}");
foreach (var pallet in pallets)
{
Console.WriteLine($"-- {pallet}");
}
Console.WriteLine("");
Array.Resize(ref pallets, 6);
Console.WriteLine($"Resizing 6 ... count: {pallets.Length}");
pallets[4] = "C01";
pallets[5] = "C02";
foreach (var pallet in pallets)
{
Console.WriteLine($"-- {pallet}");
}
關注 Array.Resize(ref pallets,6); ,呼叫Resize方法,並使用ref關鍵字以傳參考方式傳入pallets陣列,此案例中將pallets陣列元素從4個調整到6個,新元素值為Null,直到指派。
ref
方法要求以傳值方式(預設)或傳參考方法(ref關鍵字)傳遞引數,而這兩種的差別需要解釋物件在 .NET 中如何管理,需要篇幅不小。
字串資料類型的Array方法
類型為String變數具有許多可將單一字串轉換為較小字串陣列或個別字元陣列的內建方法。
ToCharArray()
string value = "abc123";
char[] valueArray = value.ToCharArray();
字元陣列合併成新字串
string value = "abc123";
char[] valueArray = value.ToCharArray();
Array.Reverse(valueArray);
string result = new string(valueArray);
Console.WriteLine(result);
Join(String.Join())
若需要使用逗號分隔字元陣列中的元素,可用此方法
string value = "abc123";
char[] valueArray = value.ToCharArray();
Array.Reverse(valueArray);
// string result = new string(valueArray);
string result = String.Join(",", valueArray);
Console.WriteLine(result);
Split()
類型為字串之變數可用 Split() 方法,將新的逗點分隔值字串分割為字串陣列。
string value = "abc123";
char[] valueArray = value.ToCharArray();
Array.Reverse(valueArray);
// string result = new string(valueArray);
string result = String.Join(",", valueArray);
Console.WriteLine(result);
string[] items = result.Split(',');
foreach (string item in items)
{
Console.WriteLine(item);
}
輸出
3,2,1,c,b,a
3
2
1
c
b
a
後記
陣列的這些協助方法感覺很有用,不過目前我還沒正式使用到陣列,這可能跟我沒接觸到太多筆資料有關係,但我相信未來我會很常接觸到這些東西。
參考資料