Arrays Asociativos
Link to arrays-asociativos
Un Array Asociativo (A veces llamado Mapa o Diccionario) es como un Array normal que puede almancenar más de una entrada. A diferencia de un Array, en el que puedes eliges el elemento a partir del indice, en un mapa tú eliges que es el indice es forma de una "clave".
Declarando un Array Asociativo
Link to declarando-un-array-asociativo
Declaras un Array Asociativo usando claudators {}
y dos puntos :
ZenScript Copyval miArrayAsociativo = {
tierra : <minecraft:dirt>,
oro : <minecraft:gold_ingot>
} as IItemStack[string];
Por partes:
val myArrayAsociativo =
declaramos el array como una variable{
esto es un Array Asociativotierra : <minecraft:dirt>
Almacenamos el valor<minecraft:dirt>
al lado de la clavetierra :
,
Hay más de un elemento en el Mapaoro : <minecraft:gold_ingot>
Almacenamos el valor<minecraft:gold_ingot>
al lado de la clavegold:
}
Hemos llegado al final del Array.as IItemStack[string];
este Mapa utiliza strings como indices y IItemStacks como elementos
¿Cómo uso estos?
- Puedes usar cualquier tipo que esta expuesto a Zenscript como un elemento o una clave.
- No puedes usar variables como claves ya que el texto a la izquierda de los dos puntos se auto interpreta como un String aunque no tenga las comillas. Por tanto, si tu tuvieras una variable la convertiria a un string con el nombre de la variable, no con el valor que esa variable representa.
Referirse a un Elemento dentro de un Mapa
Link to referirse-a-un-elemento-dentro-de-un-mapa
You refer to items inside an Associative Array the same way you refer to items inside a normal Array:
Array[index]
Only difference is this time, you don't necessarily need to use an Integer as index, but whatever type you declared your Array to be!
ZenScript Copy
val dirt = <minecraft:dirt>;
val assocArray = {
<minecraft:dirt> : "This is me"
} as string[IItemStack];
//array[index]
print(assocArray[<minecraft:dirt>]);
//You can also use variables here, as long as the variable is of the correct type
print(assocArray[dirt]);
There is one special case, that is when you use strings as indeces:
In this case you can also use the memberGetter like this:
ZenScript Copyval mapaConStrings = {
//Puedes usar comillas
"uno" : "1",
//pero no hace falta para la clave
dos : "2"
} as string[string];
//Ahora puedes usar el Getter de Miembros
print(mapaConStrings.uno);
//O la clave entre corchetes.
print(mapaConStrings["dos"]);
Manipulando elementos que se encuentran dentro de un Array Asociativo
Link to manipulando-elementos-que-se-encuentran-dentro-de-un-array-asociativo
As in Arrays, you can manipulate items inside an Associative Array using array[index] = newValue
.
There is one major differenc though:
While Arrays have a fixed size, maps don't. Esto significa que puedes añadir una entrada a un valor con una clave que aún no exista.
ZenScript Copyval mapaCambiante = {
<minecraft:dirt> : "Este soy yo",
<minecraft:gold_ingot> : "y lo odio"
} as string[IItemStack];
val oro = <minecraft:gold>;
//Cambia el valor de lingoteDeOro
mapaCambiante[oro] = "y me encanta";
//Añade una entrada nueva
mapaCambiante[<minecraft:grass>] = "Olé";
Conseguir lots Sets de Claves y Elementos de un Mapa
Link to conseguir-lots-sets-de-claves-y-elementos-de-un-mapa
The KeySet is an array containing all the map's keys.
The valueSet is an array containing all the map's values.
The entrySet is an array containing all the map's entries (see below).
ZenScript CopymyAssocArray.keySet //Set de Claves
myAssocArray.keys //Set de Claves
myAssocArray.values //Set de Elementos
myAssocArray.valueSet //Set de Elementos
myAssocArray.entrySet //Set de Entradas
Bucle + Mapa
Link to bucle--mapa
Hay dos iteradores que te permiten hacer un Bucle con un Mapa:
- The iterador de claves: Da vueltas a las claves, presenta una variable.
- El iteradores de entradas: Da vueltas a todo lo que se encuentra en el array, presenta dos variables.
Vamos a crear un Mapa que almacena recetas de crafteo para loopear:
- Las claves seran el resultado de la receta de tipo `IItemStack
,[object Object],[object Object]