34 | Asociaciones |
Las asociaciones son un tipo de generalización de las listas, donde cada elemento tiene una clave, además de un valor. Counts es una función típica que produce una asociación.
In[1]:= |
Out[1]= |
Encuentre el valor asociado con c en la asociación:
In[2]:= |
Out[2]= |
Las operaciones para trabajar con listas también funcionan con las asociaciones, aunque se aplican solamente a los valores y no a las claves.
Aquí se suma 500 a cada valor de la asociación:
In[3]:= |
Out[3]= |
In[4]:= |
Out[4]= |
Total da el total de los valores:
In[5]:= |
Out[5]= |
Sort opera sobre los valores:
In[6]:= |
Out[6]= |
KeySort opera sobre las claves:
In[7]:= |
Out[7]= |
Obtenga la lista de las claves en la asociación:
In[8]:= |
Out[8]= |
Obtenga la lista de los valores en la asociación:
In[9]:= |
Out[9]= |
Normal convierte una asociación en una lista normal de reglas. Association produce una asociación a partir de una lista de reglas.
In[10]:= |
Out[10]= |
In[11]:= |
Out[11]= |
LetterCounts cuenta las veces que aparecen las letras en una cadena de caracteres.
In[12]:= |
Out[12]= |
KeyTake elige los elementos de una asociación que aparezcan en la lista de claves que se especifique. Aquí se toman los elementos cuyas claves sean letras en el alfabeto inglés (en minúsculas).
Tome solo aquellos elementos de la asociación cuyas claves aparezcan como letras del alfabeto inglés:
In[13]:= |
Out[13]= |
BarChart grafica los valores en una asociación. Si se especifica ChartLabelsAutomatic, se usarán las claves como etiquetas.
Haga un diagrama de barras con el número de veces que aparece cada letra; la más común es la “e” :
In[14]:= |
Out[14]= |
He aquí una forma directa de aplicar una función pura a una asociación:
Aplique una función pura a una asociación:
In[15]:= |
Out[15]= |
Es muy frecuente que las claves sean cadenas de caracteres, y Wolfram Language se vale de esto en una forma especial cuando se usan funciones puras: simplemente se usa #clave cuando se haga referencia a un elemento cuya clave sea "clave".
Use la notación simplificada para los elementos de la asociación cuyas claves sean cadenas de caracteres:
In[16]:= |
Out[16]= |
Un ejemplo más realista sería aplicar una función pura que extraiga el valor de “e” del conteo de las letras, y lo divida por el total. La N da el resultado en forma decimal.
In[17]:= |
Out[17]= |
clave1value1,clave2value2, ... | una asociación | |
Association[reglas] | convierte una lista de reglas en una asociación | |
assoc[clave] | extrae un elemento de una asociación | |
Keys[assoc] | lista de las claves de una asociación | |
Values[assoc] | lista de valores en una asociación | |
Normal[assoc] | convierte una asociación en una lista de reglas | |
KeySort[assoc] | ordena una asociación según sus claves | |
KeyTake[assoc,claves] | toma elementos con claves dadas | |
#clave | ranura de función para un elemento con clave “clave” | |
Counts[lista] | una asociación con los conteos de los elementos que sean diferentes | |
LetterCounts[cadena] | una asociación con los conteos de las letras que sean diferentes |
34.1Forme la lista, ordenada, del número de veces que aparece cada uno de los dígitos del 0 al 9 en 3^100. »
34.2Construya un diagrama de barras, con etiquetas, del número de veces que aparece cada uno de los dígitos del 0 al 9 en 2^1000. »
34.3Produzca un diagrama de barras, con etiquetas, del número de veces que aparece cada una de las letras iniciales en las palabras obtenidas de WordList[ ]. »
34.4Construya una asociación que muestre las 5 letras iniciales más frecuentes en las palabras obtenidas de WordList[ ], junto con sus conteos. »
34.5Encuentre la razón numérica del número de veces que ocurren la “q” y la “u” en el artículo de Wikipedia sobre “computers”. »
Porque asocian valores con claves. Otras denominaciones para lo mismo son: arreglos asociativos, diccionarios, hashmaps, structs, mapas clave-valor y listas indexadas simbólicamente.
¿Cómo se escribe en el teclado una asociación?
Se comienza con <| (< seguido de |), y luego se escribe -> para cada . Alternativamente, se puede usar Association[a->1, b->2].
En una asociación, ¿puede haber varios elementos con la misma clave?
No. En una asociación las claves son únicas.
Por lo general, se obtiene Missing[...]. Sin embargo, si se usa Lookup para buscar la clave, puede especificarse la respuesta que se quiere ver cuando la clave no existe.
Se usa KeyMap, o funciones tales como KeySelect y KeyDrop. AssociationMap crea una asociación mapeando una función sobre un conjunto de claves.
Se usa Merge. Se requiere dar una función que indique qué hacer cuando aparezca la misma clave en múltiples asociaciones.
¿Puede usarse [[...]] para extraer una parte de una asociación, del mismo modo que se extraen partes de una lista?
Sí, si se dice explícitamente assoc[[Key[clave]]]. Por ejemplo, assoc[[2]] extrae el segundo elemento de assoc, cualquiera que sea la clave que tenga. assoc[[clave]] es un caso especial que funciona de igual manera que assoc[clave].
¿Qué sucede en el caso de funciones puras cuando las claves en una asociación no son cadenas de caracteres?
- La mayoría de las funciones operan efectivamente con asociaciones como si estuvieran operando con las listas de sus valores. Generalmente, las funciones que se enhebran con listas hacen lo mismo con asociaciones.
- Las asociaciones son como tablas en una base de datos relacional. JoinAcross hace lo análogo de juntar bases de datos.