-
Notifications
You must be signed in to change notification settings - Fork 0
API Basic Dictionary zh tw
Codex edited this page Sep 10, 2026
·
1 revision
ClassicUO • Basic
Dictionary() 建立鍵 → 值集合。請在回傳的物件上呼叫方法。數字鍵與文字鍵不同,"ore" 和 "Ore" 也不同。
Dictionary() -> Object:Dictionary
Dictionary(source:Dictionary) -> Object:Dictionary
values.Add(key:String/Number, value:Any) -> Unit
values.Item(key:String/Number) -> Any
values[key] = value
values.Set(key:String/Number, value:Any) -> Unit
values.Get(key:String/Number, fallback:Any) -> Any
values.Count() -> Integer
values.ContainsKey(key:String/Number) -> Integer:1/0
values.Remove(key:String/Number) -> Integer:1/0
values.Clear() -> Unit
values.Keys() -> Array
values.Values() -> Array
entry.Key() -> String/Number
entry.Value() -> Any
-
source— source:省略時建立空集合。List 接受陣列或 List;Dictionary 接受 Dictionary。複製外層容器,內層物件與陣列參考仍共用。 -
index / key— index / key:List 位置為從 0 開始的整數數值;Insert 也接受 Count()。Dictionary 的鍵可為文字或有限數字。數字 1 與 1.0 是相同鍵,文字 "1" 則不同。 -
value— value:已初始化的 Basic 值,可包含陣列或集合。不能儲存 Unit。相等判斷比較數值、區分大小寫的文字,或陣列/物件的參考識別。 -
fallback— fallback:鍵不存在時 Get 回傳此備用值,不插入鍵。所有引數,包括 fallback 運算式,都在方法呼叫前計算。
建構函式回傳 Object:Dictionary。Item/索引/Get 回傳值;Count 回傳鍵數。ContainsKey/Remove 回傳 1=TRUE 或 0=FALSE。Add/Set/Clear 回傳 Unit;Keys/Values 回傳新的 Array。For Each 產生項目物件,Key() 回傳鍵,Value() 回傳值。
- Add 拒絕既有鍵且不覆寫。Set/索引指定新增或取代;Item/索引讀取要求鍵存在,Get 可使用備用值。Remove 在鍵不存在時回傳 0,Clear 清空字典。
- NaN、無限值、陣列、物件及 Unit 不能當鍵。鍵的順序未定義。每個走訪項目保留自己的鍵值對,不會隨下一次迭代改變。
- Keys/Values 建立淺層快照。要在走訪時刪除/取代,請走訪 Keys();直接走訪字典則取得項目物件。
- 直接 For Each 期間修改集合(包括 Set),會在下一步產生可捕捉錯誤。Try/Finally 仍正常離開。被拒絕的修改不影響舊資料。
- 別名及 ByVal 引數共用集合。複製與快照只複製外層容器。索引式 ByRef 與複合指定只計算容器/鍵一次;重新指定變數不會改變已捕捉的回寫位置。
- 集合保存腳本本地資料。方法不移動遊戲物品,也不使用網路。以一個元素儲存的物品堆疊只占一個位置。
# "ore" 從 5 改為 8。數字鍵 1 存 2,文字鍵 "1" 存 3。Get("wood",7) 回傳 7,不插入鍵。Main 回傳 8*100+2*10+3+7,即 Integer 830。
Option Explicit On
Sub Main()
Var values = Dictionary()
values.Add("ore", 5)
values.Set("ore", 8)
values[1] = 2
values["1"] = 3
Return values.Item("ore")*100 + values[1]*10 + values["1"] + values.Get("wood", 7)
End Sub參數與執行說明:
"ore" 從 5 改為 8。數字鍵 1 存 2,文字鍵 "1" 存 3。Get("wood",7) 回傳 7,不插入鍵。Main 回傳 8100+210+3+7,即 Integer 830。
# 兩個值總和是 5。Keys() 快照允許走訪時刪除。copied 保留 ore=2,snapshot 保留兩個值。Clear 後 Count()=0。Main 回傳 5*100+2*10+2+0,即 Integer 522。
Option Explicit On
Sub Main()
Var values = Dictionary()
values.Add("ore", 2)
values.Add("wood", 3)
Var copied = Dictionary(values)
Var snapshot = values.Values()
Var total = 0
For Each entry In values
If values.ContainsKey(entry.Key()) Then
total += entry.Value()
End If
Next
For Each key In values.Keys()
values.Remove(key)
Next
values.Clear()
Return total*100 + copied["ore"]*10 + GetArrayLength(snapshot) + values.Count()
End Sub參數與執行說明:
兩個值總和是 5。Keys() 快照允許走訪時刪除。copied 保留 ore=2,snapshot 保留兩個值。Clear 後 Count()=0。Main 回傳 5100+210+2+0,即 Integer 522。
# 第一次 Add 儲存 ore=4。第二次 Add 傳入 7 時發生錯誤,Catch 設定 caught=1。原來的 ore=4 保留。Main 回傳 4*10+1,即 Integer 41。
Option Explicit On
Sub Main()
Var values = Dictionary()
values.Add("ore", 4)
Var caught = 0
Try
values.Add("ore", 7)
Catch problem
caught = 1
End Try
Return values["ore"]*10 + caught
End Sub參數與執行說明:
第一次 Add 儲存 ore=4。第二次 Add 傳入 7 時發生錯誤,Catch 設定 caught=1。原來的 ore=4 保留。Main 回傳 4*10+1,即 Integer 41。
ClassicUO - Bad Newbie & Basic IDE Edition