- D 程式設計基礎
- D 程式設計 - 首頁
- D 程式設計 - 概述
- D 程式設計 - 環境
- D 程式設計 - 基本語法
- D 程式設計 - 變數
- D 程式設計 - 資料型別
- D 程式設計 - 列舉
- D 程式設計 - 字面量
- D 程式設計 - 運算子
- D 程式設計 - 迴圈
- D 程式設計 - 條件判斷
- D 程式設計 - 函式
- D 程式設計 - 字元
- D 程式設計 - 字串
- D 程式設計 - 陣列
- D 程式設計 - 關聯陣列
- D 程式設計 - 指標
- D 程式設計 - 元組
- D 程式設計 - 結構體
- D 程式設計 - 聯合體
- D 程式設計 - 範圍
- D 程式設計 - 別名
- D 程式設計 - 混入
- D 程式設計 - 模組
- D 程式設計 - 模板
- D 程式設計 - 不可變
- D 程式設計 - 檔案 I/O
- D 程式設計 - 併發
- D 程式設計 - 異常處理
- D 程式設計 - 合約
- D - 條件編譯
- D 程式設計 - 面向物件
- D 程式設計 - 類與物件
- D 程式設計 - 繼承
- D 程式設計 - 過載
- D 程式設計 - 封裝
- D 程式設計 - 介面
- D 程式設計 - 抽象類
- D 程式設計 - 有用資源
- D 程式設計 - 快速指南
- D 程式設計 - 有用資源
- D 程式設計 - 討論
D 程式設計 - 關聯陣列
關聯陣列的索引不一定是整數,並且可以是稀疏填充的。關聯陣列的索引稱為鍵,其型別稱為鍵型別。
關聯陣列透過在陣列宣告的 [ ] 中放置鍵型別來宣告。下面顯示了一個關聯陣列的簡單示例。
import std.stdio;
void main () {
int[string] e; // associative array b of ints that are
e["test"] = 3;
writeln(e["test"]);
string[string] f;
f["test"] = "Tuts";
writeln(f["test"]);
writeln(f);
f.remove("test");
writeln(f);
}
當以上程式碼編譯並執行時,它會產生以下結果:
3 Tuts ["test":"Tuts"] []
初始化關聯陣列
下面顯示了一個關聯陣列的簡單初始化。
import std.stdio;
void main () {
int[string] days =
[ "Monday" : 0,
"Tuesday" : 1,
"Wednesday" : 2,
"Thursday" : 3,
"Friday" : 4,
"Saturday" : 5,
"Sunday" : 6 ];
writeln(days["Tuesday"]);
}
當以上程式碼編譯並執行時,它會產生以下結果:
1
關聯陣列的屬性
以下是關聯陣列的屬性:
| 序號 | 屬性及描述 |
|---|---|
| 1 | .sizeof 返回對關聯陣列的引用的大小;在 32 位構建中為 4,在 64 位構建中為 8。 |
| 2 | .length 返回關聯陣列中的值的數量。與動態陣列不同,它是隻讀的。 |
| 3 | .dup 建立一個相同大小的新關聯陣列,並將關聯陣列的內容複製到其中。 |
| 4 | .keys 返回動態陣列,其元素是關聯陣列中的鍵。 |
| 5 | .values 返回動態陣列,其元素是關聯陣列中的值。 |
| 6 | .rehash 重新組織關聯陣列以使其查詢更有效率。例如,當程式完成符號表的載入並且現在需要快速查詢其中的內容時,rehash 非常有效。返回對重新組織的陣列的引用。 |
| 7 | .byKey() 返回一個委託,適合用作 ForeachStatement 的聚合,它將迭代關聯陣列的鍵。 |
| 8 | .byValue() 返回一個委託,適合用作 ForeachStatement 的聚合,它將迭代關聯陣列的值。 |
| 9 | .get(Key key, lazy Value defVal) 查詢鍵;如果存在則返回相應的值,否則計算並返回 defVal。 |
| 10 | .remove(Key key) 刪除鍵對應的物件。 |
示例
下面顯示了一個使用上述屬性的示例。
import std.stdio;
void main () {
int[string] array1;
array1["test"] = 3;
array1["test2"] = 20;
writeln("sizeof: ",array1.sizeof);
writeln("length: ",array1.length);
writeln("dup: ",array1.dup);
array1.rehash;
writeln("rehashed: ",array1);
writeln("keys: ",array1.keys);
writeln("values: ",array1.values);
foreach (key; array1.byKey) {
writeln("by key: ",key);
}
foreach (value; array1.byValue) {
writeln("by value ",value);
}
writeln("get value for key test: ",array1.get("test",10));
writeln("get value for key test3: ",array1.get("test3",10));
array1.remove("test");
writeln(array1);
}
當以上程式碼編譯並執行時,它會產生以下結果:
sizeof: 8 length: 2 dup: ["test":3, "test2":20] rehashed: ["test":3, "test2":20] keys: ["test", "test2"] values: [3, 20] by key: test by key: test2 by value 3 by value 20 get value for key test: 3 get value for key test3: 10 ["test2":20]
廣告