今天我們來談談 Delphi XE7 開始支援的動態陣列處理,讓我們可以更輕鬆地處理陣列的新增、刪除、排序等操作。
首先,我們先來看一個簡單的例子:
var
arr: array of Integer;
i: Integer;
begin
SetLength(arr, 3); // 設定陣列長度
arr[0] := 1; // 初始化值
arr[1] := 2;
arr[2] := 3;
for i := Low(arr) to High(arr) do
Memo1.Lines.Add(IntToStr(arr[i])); // 在 Memo 中顯示陣列元素
可以看到,我們直接把要初始化的值放在中括號內,並賦值給一個動態陣列變數,就完成了初始化的動作。
接下來,我們來看看動態陣列的拼接功能:
var
arr1, arr2, arr3: array of Integer;
begin
arr1 := [1, 2];
arr2 := [3, 4];
arr3 := arr1 + arr2; // 陣列拼接
這個例子中,我們定義了三個動態陣列,arr1 和 arr2 分別包含了兩個元素,然後使用 + 符號把它們拼接成一個新的陣列 arr3。可以看到,Delphi 的動態陣列拼接功能非常方便,讓我們可以很容易地處理多個陣列的合併操作。
除了動態陣列的初始化和存取元素,Delphi 還提供了一些便利的方法來處理動態陣列。
在此之前,先來介紹一下 "TArray" 類別。
什麼是 TArray
當需要使用動態陣列時,Delphi 提供了一個方便的類別:TArray<T>。TArray<T> 實際上是一個泛型類別,其中的 T 表示要存儲的元素類別。例如,TArray<Integer> 表示一個動態整數陣列。
使用 TArray<T> 來聲明動態陣列時,可以使用 array of <T> 語法的替代方式。例如,array of Integer 可以寫成 TArray<T>。
相比傳統的動態陣列 array of,TArray<T> 具有更多的優點。例如,TArray<T> 可以與泛型集合類別一起使用,可以方便地轉換為靜態陣列,還可以簡化程式碼。
下面是一個 TArray<T> 的簡單範例,它展示了如何創建一個動態整數陣列,以及如何將兩個動態陣列進行連接:
var
di: TArray<Integer>;
i: Integer;
begin
// 創建一個動態整數陣列
di := TArray<Integer>.Create(1, 2, 3);
// 連接兩個動態陣列
di := di + di; // [1,2,3] + [1,2,3] = [1,2,3,1,2,3]
for i in di do
begin
Memo1.Lines.Add(i.ToString);
end;
end;
上面的代碼中,TArray<Integer>.Create 創建了一個包含整數 1、2、3 的動態陣列。使用 + 操作符將兩個動態陣列連接在一起,形成一個新的動態陣列 di。
最後,使用 for in 循環遍歷 di 中的每個元素,並將其添加到 Memo1 元件中,以便輸出到使用者介面。
在使用 TArray 來管理動態陣列時,我們還可以加入排序功能,讓實體內的元素按照特定的方式進行排序。
TArray 是 Delphi 中一個非常強大的動態陣列類別,它提供了很多方便的方法來處理動態陣列。其中,排序功能就是其中之一。
要對 TArray 進行排序,我們可以使用 TArray.Sort 方法。這個方法需要一個實體作為輸入,並且可以指定一個比較器來決定排序的方式。
以下是一個對 Integer 陣列進行排序的範例:
var
arr: TArray<Integer>;
i: Integer;
begin
arr := [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
TArray.Sort<Integer>(arr);
// Output sorted array
for i := 0 to Length(arr) - 1 do
Memo1.Lines.Add(arr[i].ToString);
end;
這個範例中,我們先定義了一個 Integer 陣列,然後使用 TArray.Sort 方法對其進行排序。最後,我們遍歷陣列並輸出排序後的結果。
除了對整數陣列進行排序外,我們也可以對字串陣列進行排序。在進行字串排序時,建議使用 TStringComparer.Ordinal 作為比較器,這樣可以按照字典序對字串進行排序。以下是一個對字串陣列進行排序的範例:
uses
System.Generics.Collections, System.Generics.Defaults;
var
arr: TArray<string>;
item: string;
begin
arr := ['apple', 'banana', 'cat', 'dog', 'egg'];
TArray.Sort<string>(arr, TStringComparer.Ordinal);
// Output sorted array
for item in arr do
Memo1.Lines.Add(item);
end;
這個範例中,我們同樣先定義了一個字串陣列,然後使用 TArray.Sort 方法和 TStringComparer.Ordinal 作為比較器對其進行排序。最後,我們遍歷陣列並輸出排序後的結果。
綜上所述,TArray 提供了方便易用的排序功能,可以輕鬆地對動態陣列進行排序。在排序時,我們還可以指定比較器來控制排序方式,這樣可以滿足更多不同的排序需求。
陣列懶人包
若您想要更深入地了解動態陣列的操作與技巧,可以參考以下的程式碼範例:
var
arr: array of Integer;
i: Integer;
begin
// 動態陣列的初始化
SetLength(arr, 3); // 預先指定陣列大小
arr[0] := 1;
arr[1] := 2;
arr[2] := 3;
// 動態陣列的擴充
SetLength(arr, Length(arr) + 2);
arr[3] := 4;
arr[4] := 5;
// 動態陣列的排序
TArray.Sort<Integer>(arr);
// 動態陣列的反轉
TArray.Reverse<Integer>(arr);
// 動態陣列的搜尋
i := TArray.BinarySearch<Integer>(arr, 2); // 搜尋數值 2 的索引
if i >= 0 then
ShowMessage('數值 2 的索引為 ' + i.ToString)
else
ShowMessage('找不到數值 2');
// 動態陣列的迭代
for i in arr do
begin
Memo1.Lines.Add(i.ToString);
end;
這些範例展示了動態陣列的一些基本操作,包括初始化、擴充、排序、反轉、搜尋以及迭代。您可以根據您的需要對這些操作進行擴充和修改,以滿足不同的程式開發需求。
總結
在 Delphi 中,動態陣列是一個十分有用的工具,可以方便地操作和管理大量的資料。透過這篇文章的介紹和程式碼範例,您可以更好地了解動態陣列的使用方法和技巧,以滿足您在開發過程中的不同需求。希望這篇文章能對您有所幫助,謝謝您的閱讀!
沒有留言:
張貼留言