組合陣列明顯地與靜態、動態陣列不同,它可以讓你用整數以外的型態來當作索引。它可以用來掌握特定型泰的內容且需要有關鍵字(key)。D的組合陣列類似其它語言的hash maps,屬於原生動態且總是活動於堆積之內。
宣告方式看起來如下:
int[char[]] x; float[double] y; char[][char[]] z;
第一行是宣告整數型態內容而使用字元型態作為索引的組合陣列
第二行是浮點型態內容而使用雙倍浮點索引的組合陣列
第三航則是字元型態內容而使用字元索引的組合陣列
宣告之後,使用的方式為
aa[key] = value;
如果該key關聯處已有既存內容,將會被取代。而要取用內容時,可以用這樣的語法
value=aa[key];
如果索引並不存在,D執行模組將會給出錯誤訊息表示陣列索引被超出(array index is out of bounds)。
組合陣列特有的屬性如下:
length | 組合陣列的內容數量,如同靜態陣列是唯讀 |
keys | 組合陣列內涵蓋全部索引的動態陣列 |
value | 組合陣列內涵蓋所有內容的動態陣列 |
rehash | 在空間中重組組合陣列使其更有效率並傳回新陣列 |
由於組合陣列的限制,它無法在不增加或移除索引/內容的數量下來改變它,所以length屬性是唯讀。rehash屬性是個需要付出代價的操作,但可以讓大量的索引作業起來更有效率。
組合陣列有兩個比較特別的操作方式:
in | 這可在當內容決定要賦予給某特定索引後進入組合陣列。這在避免覆蓋已存在的索引上非常好用。因為in在內容存在時會傳回指標,反之傳回null。 |
remove | 它用來把特定索引及內容從組合陣列內移除。 |
而以下是個範例:
int[char[]] aa; aa["One"] = 1; int x = aa["One"]; int *y = ("Two" in aa); if (y is null) { aa["Two"]=2; } aa.remove("One");
沒有留言:
張貼留言