API Basic List es - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
List
ClassicUO • Basic
List() crea una colección ordenada de longitud variable. Guarde el objeto en una variable: items.Add es un método, no un comando global List.Add.
Sintaxis exacta
List() -> Object:List
List(source:Array/List) -> Object:List
items.Add(value:Any) -> Unit
items.Insert(index:Number, value:Any) -> Unit
items.Item(index:Number) -> Any
items[index] = value
items.Set(index:Number, value:Any) -> Unit
items.Count() -> Integer
items.Contains(value:Any) -> Integer:1/0
items.IndexOf(value:Any) -> Integer:index/-1
items.Remove(value:Any) -> Integer:1/0
items.RemoveAt(index:Number) -> Unit
items.Clear() -> Unit
items.ToArray() -> Array
Parámetros
source— source: omitirlo crea una colección vacía. List acepta una matriz o List; Dictionary acepta Dictionary. Se copia el contenedor exterior y se comparten referencias anidadas.index / key— index / key: posiciones List numéricas enteras desde 0; Insert también admite Count(). Dictionary admite texto o números finitos. Los números 1 y 1.0 identifican una clave; el texto "1", otra.value— value: valor Basic inicializado, incluida matriz o colección. Unit no se puede almacenar. Igualdad numérica, texto sensible a mayúsculas o identidad de referencias.fallback— fallback: Get devuelve este valor si falta la clave, sin insertarla. Todos los argumentos, incluida la expresión fallback, se evalúan antes de llamar.
Devuelve
El constructor devuelve Object:List. Item/índice lee un valor; Count cuenta elementos; IndexOf da una posición desde 0 o -1. Contains/Remove devuelven 1=TRUE o 0=FALSE. Add/Insert/Set/RemoveAt/Clear devuelven Unit; ToArray, un nuevo Array.
Comportamiento
- Add añade al final; Insert inserta antes de la posición; Set/índice reemplaza un elemento existente; Item/índice lo lee. Remove elimina el primer valor igual, RemoveAt una posición, Clear todos.
- Contains comprueba pertenencia e IndexOf encuentra la primera coincidencia. Los índices negativos, fraccionarios, textuales o fuera de rango producen un error capturable sin cambios.
- For Each conserva el orden. ToArray crea una copia superficial para recorrer mientras cambia la lista original.
- Modificar durante For Each directo, incluso con Set, produce un error capturable en el siguiente paso. Try/Finally se desenrolla correctamente. Los cambios rechazados conservan los datos.
- Los alias y ByVal comparten la colección. Las copias duplican solo el contenedor exterior. ByRef indexado y la asignación compuesta evalúan contenedor/clave una vez; reemplazar la variable no redirige la escritura.
- Son datos locales del script: los métodos no mueven objetos del juego ni usan la red. Una pila guardada como elemento ocupa una posición.
Ejemplos
1. Crear y sumar una lista
# Add produce [3,7]; Insert(1,5), [3,5,7]; Set(0,2), [2,5,7]. For Each suma tres valores. Main devuelve Integer 14.
Option Explicit On
Sub Main()
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
Explicación de los parámetros y la ejecución:
Add produce [3,7]; Insert(1,5), [3,5,7]; Set(0,2), [2,5,7]. For Each suma tres valores. Main devuelve Integer 14.
2. Copias independientes
# seed=[4,6]. copied y snapshot mantienen esos valores. El original pasa a [9,6]; Remove(6) devuelve TRUE=1, RemoveAt(0) lo vacía y Clear lo mantiene vacío. Main devuelve 4*100+6*10+1+0, Integer 461.
Option Explicit On
Sub Main()
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
Explicación de los parámetros y la ejecución:
seed=[4,6]. copied y snapshot mantienen esos valores. El original pasa a [9,6]; Remove(6) devuelve TRUE=1, RemoveAt(0) lo vacía y Clear lo mantiene vacío. Main devuelve 4100+610+1+0, Integer 461.
3. Búsqueda y ByRef
# NextIndex se ejecuta una vez: calls=1, índice 0. Bump cambia 5 a 6. Contains(6)=TRUE, IndexOf(6)=0, Item(0) devuelve 6. Main devuelve Integer 601.
Option Explicit On
Function NextIndex(ByRef calls)
calls += 1
Return 0
End Function
Sub Bump(ByRef value)
value += 1
End Sub
Sub Main()
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
Explicación de los parámetros y la ejecución:
NextIndex se ejecuta una vez: calls=1, índice 0. Bump cambia 5 a 6. Contains(6)=TRUE, IndexOf(6)=0, Item(0) devuelve 6. Main devuelve Integer 601.