Dictionary
Los diccionarios son un tipo de coleccion como una lista o un array, pero que
vinculan diferentes tipo de datos. Los diccionarios contienen pares de ‘keys’
vinculados con ‘values’, esto quiere decir que para cada pabra clave,
relacionaremos un valor.
💡 Las keys de un diccionario funcionan igual que un HashSet, así que sus
valores son irrepetibles. Al guardarse mediante hashing, si tenemos por
ejemplo un int como key siempre sabemos que no va a estar repetido y
podemos consultarlo en O(1), en lugar de tener que recorrer la colección
comparando valor por valor.
💡 Tanto el key como el value pueden ser de cualquier tipo que querramos.
Sintaxis
A la hora de crear un diccionario, es similar a una lista (se utilizan tipos genericos,
y por eso los <>) , solo que debemos decirle de que tipo sera tanto el key como el
Dictionary 1
value. En el ejemplo se crea un diccionario ‘resourceTypeAmountDictionary’ con el
key tipo ‘ResourceType’ (enum) y el value en int.
Agregar y modificar valores de un key
Es importante tomar en cuenta que una vez que asignamos un valor a un key
con la funcion .Add, este ya tiene su valor asignado y no puede recibir un
segundo valor, debemos utilizar otra sintaxis para cambiar el mismo.
Si solo queremos remover un valor y dejarlo en blanco podemos hacerlo con la
funcion .Remove
Dictionary 2
Leer y checkear valores de un key
Si tratamos de leer el valor de un key que no esta asignado esto dara error, por
lo que siempre tenemos que checkear antes si el valor ya fue asignado.
Hay dos formas de hacerlo, la primera es con TryGetValue que devuelve true o
false (y el valor asignado en caso de ser true):
La segunda es utilizando la funcion .ContainsKey
Dictionary 3
Inicilaizar el diccionario con sus valores asignados
Si deseamos agregar los valores originales del diccionario cuando lo creamos,
solo debemos escribir los mismos entre {} al final de la inicializacion. Debemos
tomar en cuenta que este tipo de listas son key-value paired por lo que
debemos agrupar cada key con su value entre nuevos {}.
Loopear en los valores del diccionario
Loopear por todos los pares key-value
Para loopear entre los valores del diccionario podemos utilizar un foreach
pero debemos tomar en cuenta que en lugar de elementos de la coleccion,
tenemos que decirle que debe pasar por cada par key-value. Esto se hace
con la palabra clave KeyValuePair.
Dictionary 4
Loopear por los keys o los values individualmente
Otra alternativa para esto seria loopear por cada uno de los keys, que da el
mismo resultado:
Si no, podemos loopear por solo los values:
Como exponer en el editor de unity con una clase
💡 Unity no muestra los diccionarios en el explorador, ni auque le
pongamos el modificador [Serializefield]. Para hacer diccionarios o
vincular mas de un tipo de valores juntos, debemos hacer una clase
que contenga todos los valores que querramos agrupar con la
palabra clave [Serializable], y luego podemos hacer una lista de
estas clases (como hicimos en akakuma para el enemyManager) 👇
Dictionary 5
Opcionalmente, podemos asignar estos valores a un diccionario en el awake,
que se adaptara a las modificaciones que hagamos automaticamente:
Dictionary 6