API Basic Dictionary uk - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Dictionary

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 самого словника видає об’єкти записів.
  • Зміна колекції під час прямого For Each, включно з Set, викликає перехоплювану помилку на наступному кроці. Try/Finally коректно виконує вихід. Невдала зміна зберігає старі дані.
  • Псевдоніми й аргументи ByVal мають спільну колекцію. Конструктор копії та знімки копіюють лише зовнішній контейнер. Індексований ByRef і складене присвоєння обчислюють контейнер/ключ один раз; заміна змінної не змінює місце запису.
  • Це локальні дані скрипту: методи не пересувають ігрові предмети й не звертаються до мережі. Стос, збережений одним елементом, займає одну позицію списку.

Приклади

1. Тип ключа й запасне значення

# "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.

2. Записи, знімки та видалення

# Сума двох значень дорівнює 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.

3. Повторний ключ та обробка помилки

# Перший 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.


en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic