API List - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

List

Оглавление · Все команды

ClassicUO • Runtime API

List() создаёт упорядоченный список изменяемой длины. Сохраните полученный объект в переменную: items.Add — метод объекта, отдельной глобальной команды List.Add нет.

Точный синтаксис

List() -> Object
List(source:Any) -> Object

Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.

Параметры

  • source — source: без аргумента создаётся пустая коллекция. List принимает массив или List; Dictionary — другой Dictionary. Копируется внешний контейнер, вложенные объекты и массивы остаются общими ссылками.

Возвращает

Конструктор возвращает Object:List. Item и чтение индекса возвращают хранимое значение. Count — количество элементов, IndexOf — позиция от 0 либо -1. Contains/Remove возвращают 1=TRUE или 0=FALSE. Add/Insert/Set/RemoveAt/Clear возвращают Unit. ToArray — новый Array.

Поведение

  • index / key: позиция List — целое числовое значение от 0; Insert допускает также Count(). Ключ Dictionary — текст или конечное число. Числовые 1 и 1.0 — один ключ, строка "1" — другой.
  • value: инициализированное значение Basic, включая массивы и вложенные коллекции. Unit хранить нельзя. Сравниваются числовые значения, текст с учётом регистра либо идентичность ссылок массивов/объектов.
  • fallback: Get возвращает это значение при отсутствии ключа, не добавляя его. Все аргументы, включая выражение fallback, вычисляются до вызова метода.
  • Add добавляет в конец; Insert вставляет перед позицией; Set или запись по индексу заменяет существующий элемент. Item и индекс читают его. Remove удаляет первое равное значение, RemoveAt — элемент по позиции, Clear — всё содержимое.
  • Contains проверяет наличие, IndexOf ищет первое совпадение. Отрицательный, дробный, текстовый или выходящий за границы индекс вызывает перехватываемую ошибку без изменения списка.
  • For Each сохраняет порядок списка. ToArray создаёт поверхностную копию: перебирайте её, если одновременно меняете исходный список.
  • Изменение коллекции во время непосредственного For Each, включая Set, вызывает перехватываемую ошибку на следующем шаге. Try/Finally выполняет выход корректно. Неудачное изменение сохраняет прежние данные.
  • Псевдонимы и аргументы ByVal используют общую коллекцию. Конструктор копии и снимки копируют только внешний контейнер. Индексированный ByRef и составное присваивание вычисляют контейнер/ключ один раз; замена переменной не перенаправляет запись.
  • Это локальные данные скрипта: методы не переносят предметы в игре и не обращаются к сети. Стопка, сохранённая одним элементом, занимает одну позицию списка.

Примеры

Пример 1. Создание списка и сумма

# Создание списка и сумма
#
# List() создаёт упорядоченный список изменяемой длины. Сохраните полученный объект в
# переменную: items.Add — метод объекта, отдельной глобальной команды List.Add нет.
#
# Конструктор возвращает Object:List. Item и чтение индекса возвращают хранимое значение. Count
# — количество элементов, IndexOf — позиция от 0 либо -1. Contains/Remove возвращают 1=TRUE или
# 0=FALSE. Add/Insert/Set/RemoveAt/Clear возвращают Unit. ToArray — новый Array.

Option Explicit On
Sub Main()
    # Add создаёт [3,7]; Insert(1,5) — [3,5,7]; Set(0,2) — [2,5,7]. For Each суммирует три значения.
    # Main возвращает Integer 14.

    Var items = List()
    items.Add(3)
    items.Add(7)
    items.Insert(1, 5)
    items.Set(0, 2)
    Var total = 0
    For Each item In items
        total += item
    Next
    Return total
End Sub

Разбор параметров и выполнения:

  • Add создаёт [3,7]; Insert(1,5) — [3,5,7]; Set(0,2) — [2,5,7]. For Each суммирует три значения. Main возвращает Integer 14.

Пример 2. Независимые копии и снимок

# Независимые копии и снимок
#
# List() создаёт упорядоченный список изменяемой длины. Сохраните полученный объект в
# переменную: items.Add — метод объекта, отдельной глобальной команды List.Add нет.
#
# Конструктор возвращает Object:List. Item и чтение индекса возвращают хранимое значение. Count
# — количество элементов, IndexOf — позиция от 0 либо -1. Contains/Remove возвращают 1=TRUE или
# 0=FALSE. Add/Insert/Set/RemoveAt/Clear возвращают Unit. ToArray — новый Array.

Option Explicit On
Sub Main()
    # seed=[4,6]. copied и snapshot сохраняют эти значения. Исходный список становится [9,6];
    # Remove(6) возвращает TRUE=1, RemoveAt(0) опустошает его, Clear оставляет пустым. Main
    # возвращает 4*100+6*10+1+0, Integer 461.

    Dim seed[1]
    seed[0] = 4
    seed[1] = 6
    Var items = List(seed)
    Var copied = List(items)
    Var snapshot = items.ToArray()
    items[0] = 9
    Var removed = items.Remove(6)
    items.RemoveAt(0)
    items.Clear()
    Return snapshot[0]*100 + copied[1]*10 + removed + items.Count()
End Sub

Разбор параметров и выполнения:

  • seed=[4,6]. copied и snapshot сохраняют эти значения. Исходный список становится [9,6]; Remove(6) возвращает TRUE=1, RemoveAt(0) опустошает его, Clear оставляет пустым. Main возвращает 4100+610+1+0, Integer 461.

Пример 3. Поиск и изменение через ByRef

# Поиск и изменение через ByRef
#
# List() создаёт упорядоченный список изменяемой длины. Сохраните полученный объект в
# переменную: items.Add — метод объекта, отдельной глобальной команды List.Add нет.
#
# Конструктор возвращает Object:List. Item и чтение индекса возвращают хранимое значение. Count
# — количество элементов, IndexOf — позиция от 0 либо -1. Contains/Remove возвращают 1=TRUE или
# 0=FALSE. Add/Insert/Set/RemoveAt/Clear возвращают Unit. ToArray — новый Array.

Option Explicit On
Function NextIndex(ByRef calls)
    calls += 1
    Return 0
End Function
Sub Bump(ByRef value)
    value += 1
End Sub
Sub Main()
    # NextIndex вызывается один раз: calls=1, индекс 0. Bump меняет хранимое 5 на 6.
    # Contains(6)=TRUE, IndexOf(6)=0, Item(0) возвращает 6. Main возвращает Integer 601.

    Var items = List()
    items.Add(5)
    Var calls = 0
    Bump(items[NextIndex(calls)])
    If items.Contains(6) AndAlso items.IndexOf(6) = 0 Then
        Return items.Item(0)*100 + calls
    End If
    Return -1
End Sub

Разбор параметров и выполнения:

  • NextIndex вызывается один раз: calls=1, индекс 0. Bump меняет хранимое 5 на 6. Contains(6)=TRUE, IndexOf(6)=0, Item(0) возвращает 6. Main возвращает Integer 601.