Firmas de Índice
Parte de la sección Introducción a Luau del Journey de Lua de Coddy. Lección 72 de 73.
Ya conociste los tipos de mapa como {[string]: number} en el capítulo sobre tablas: una firma de índice: cualquier clave de cadena se asigna a un valor numérico. Son ideales cuando no se conocen las claves mientras escribes el código: contadores, configuraciones, cachés, puntuaciones; cualquier cosa que se construya durante el tiempo de ejecución.
type Counts = {[string]: number}
local counts: Counts = {}
counts["potion"] = 3 -- se permite cualquier clave de tipo string
counts["sword"] = 1
counts["potion"] += 1 -- los valores se comprueban como númerosHay dos aspectos del tiempo de ejecución importantes al trabajar con mapas. Primero, leer una clave que nunca se estableció devuelve nil: el patrón clásico de conteo lo gestiona con or, convirtiendo lo «faltante» en 0:
counts[item] = (counts[item] or 0) + 1Segundo, pairs() itera las claves de un mapa en un orden no garantizado: ejecutar el mismo programa dos veces puede recorrer las claves de manera diferente. Cuando la salida debe ser predecible, recopila las claves en un arreglo, aplica table.sort sobre ellas e itera el arreglo ordenado:
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 los objetos obtenidos con un mapa tipado.
- Declara
type Counts = {[string]: number}. - Escribe
countItems(items: {string}): Countsque construya un mapaCountsnuevo y cuente 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 objeto distinto, en orden alfabético: recopila las claves, ordénalas contable.sorty después imprime.
Salida esperada:
potion: 3
shield: 1
sword: 2Pruébalo tú mismo
-- Escribe el 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) recopila las keys, table.sort de ellas, 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 MapsPractica por tu cuenta: Compilador de Lua online