MudOS 0.9 提供了名為「映射」的資料型態. 映射與其他語言中的聯結陣列 (associative
arrays) 一樣 (例如 Perl). 一個聯結陣列與普通的陣列類似, 但是聯結陣列可以使用任何資料型態
(字串、物件、整數、陣列等等) 作為索引(index) , 而陣列只能使用整數. 另外,
聯結陣列是疏鬆的陣列 (sparse arrays), 也就是說, 您可以只指定第 1,000,000
項元素的內容, 而不必指定其他元素.
映射有兩個實際的用途:
請注意一個映射必須先初始化, 才能指定其中的任何元素. 有此限制是因為遊戲驅動程式將所有的變數初始化為 0 (不管變數是什麼型態). 如果您沒有初始化一個映射, 您為此陣列指定元素時, 就會看到 Indexing on illegal type (索引指向的資料型態違法) 的錯誤.
新的 (關鍵字, 內容值) 可以用以下的方法加進一個映射:
映射中的一個元素可以下行的方式讀取:
mixed *idx;
map x;
x = ([ "x" : 3, "y" : 4]);
idx = keys(x); /* idx
== ({"x", "y"}) 或 ({"y", "x"}) */
請注意, 看來很明顯的, keys() 會以一個隨機的順序 (random) 傳回索引的列表 (這種隨機的順序, 是映射儲存資料的方式的副作用 ---- 在此, 是因為可擴充式資料搜尋表 (extensible hash table) 順序的關係)
一個映射的內容值 (values) 列表, 可以 values() 外部函式列出:
(關鍵字, 內容值) 在一個映射中, 可以利用 each() 外部函式反覆搜尋. each() 在找到映射的尾端時, 就傳回一個空向量 (null vector). each() 傳回 (關鍵字, 內容值) 的順序, 與 keys() 和 values() 傳回的順序相同. 舉例:
while ((pair = each(x)) != ({})) {
x = ([]);
y = ([]);
y["a"] = "c";
x["b"] = y;
r1 = ([]);
r2 = ([]);
r1["driver"] = "mudlib";
r2["mudlib"] = "castle";
您也可以將兩個映射相加. 兩個映射的總和定義為兩個映射的聯集 (union).
「+=」也可使用. 所以您可以用:
映射不能使用 - (減號) 運算子﹝要使用 map_delete() ﹞.
sizeof() 外部函式可以判斷一個映射中有多少對 (關鍵字, 內容值) 的資料.
MudOS 的映射使用可擴充式的資料搜尋表 (extensible hash table). 資料搜尋表的大小一定是 2 的乘冪 (power of 2). 當資料搜尋表的內容裝滿一定的程度時, 資料搜尋表的就增為兩倍以維持資料搜尋的效率.
映射資料結構的一部份是基於 Larry Wall 寫的 Perl 程式語言的 hash.c 模組.
Perl 的整套程式適用於 GNU Copyleft general public license.