Firmas de Índice
Parte de la sección Introducción a Luau del Journey de Lua de Coddy — lección 72 de 73.
Conociste los tipos de mapa como {[string]: number} en el capítulo de tablas; una firma de índice: cualquier clave string se asigna a un valor number. Destacan cuando las claves no se conocen mientras escribes el código: contadores, configuraciones, cachés, puntuaciones; cualquier cosa creada en tiempo de ejecución.
type Counts = {[string]: number}
local counts: Counts = {}
counts["potion"] = 3 -- cualquier clave de cadena está permitida
counts["sword"] = 1
counts["potion"] += 1 -- los valores se comprueban como númerosDos hechos en tiempo de ejecución son importantes al trabajar con mapas. Primero, leer una clave que nunca se estableció devuelve nil; el patrón de conteo clásico maneja esto con or, convirtiendo "missing" en 0:
counts[item] = (counts[item] or 0) + 1Segundo, pairs() itera las claves de un mapa sin ningún orden garantizado: ejecutar el mismo programa dos veces puede visitar las claves de forma diferente. Siempre que la salida deba ser predecible, recolecta las claves en un array, ordénalas con table.sort e itera el array ordenado en su lugar:
local keys: {string} = {}
for key in pairs(counts) do
table.insert(keys, key)
end
table.sort(keys)
for _, key in ipairs(keys) do
print(`{key}: {counts[key]}`)
endDesafío
FácilCuenta el botín con un mapa tipado.
- Declara
type Counts = {[string]: number}. - Escribe
countItems(items: {string}): Countsque construya un nuevo mapaCounts, contando cuántas veces aparece cada cadena (usa el patrón(counts[item] or 0) + 1). - Crea
local loot: {string} = {"potion", "sword", "potion", "shield", "potion", "sword"}y cuéntalo. - Imprime una línea
[name]: [count]por cada elemento distinto, en orden alfabético: recopila las claves, ordénalas contable.sorty después imprímelas.
Resultado esperado:
potion: 3
shield: 1
sword: 2Pruébalo tú mismo
-- Escribe código aquí
-- 1) type Counts = {[string]: number}
-- 2) countItems(items: {string}): Counts usando (counts[item] or 0) + 1
-- 3) cuenta el array loot de la tarea
-- 4) recolecta las keys, table.sort them, imprime las líneas `{name}: {count}`
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Introducción a Luau
1Primeros pasos con Luau
¿Qué es Luau?¿Por qué usar Luau?Tu primer código en LuauComprobación de tipos y modos de errorRecapitulacion: Introducción a Luau4Trabajando con Funciones
Tipado de Parámetros y Valores de RetornoTipado de Funciones AnónimasFunciones que no Retornan NadaParámetros OpcionalesValores por Defecto en ParámetrosFunciones VariádicasDefinición de Tipos de FuncionesRecapitulaciones: Funciones Tipadas2Tipos principales
Tipos básicos: num, str, boolEl tipo 'any': Vía de escapeEl tipo 'unknown'Tipos nulos y opcionalesInferencia de tipos en acciónAnotaciones explícitas de tiposResumen: Práctica de tipos principales5Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de uniónTrabajando con tipos de uniónTipos literalesTipos de intersecciónCombinando alias de tiposResumen: Combinaciones avanzadas de tipos3Tablas tipadas: Arrays y Maps
Arrays tipadosAñadir y leer elementos¿Qué es un tipo Map?Declarar y acceder a MapsIterar tablasTablas de forma mixtaArrays tipados multidimensionalestable.unpack y VarargsRecapitulaciones: Arrays y Maps