2010-03-11 25 views
6

Estoy intentando redondear casos cuando tiene sentido usar un mapa (conjunto de entradas de valores-clave). Hasta ahora tengo dos categorías (ver abajo). Suponiendo que existan más, ¿qué son?¿Cuándo tiene sentido usar un mapa?

Limite cada respuesta a una categoría única y ponga un ejemplo.


Los valores de propiedad (like a bean)

age -> 30 
sex -> male 
loc -> calgary 

Presencia, con O (1) el rendimiento

peter -> 1 
john -> 1 
paul -> 1 
+1

Ejemplo pragmático: cuando necesita un conjunto y todo lo que está integrado en su idioma son los mapas, un mapa de valor para [cualquier tipo pequeño] es un sustituto decente. – Brian

+0

Para decir la verdad, simplemente no entiendo cuál es la pregunta. Básicamente, la lista es infinita siempre que haya algo en el universo que aún no esté asociado con otra cosa. Al menos no sabría cómo juzgar las respuestas ... –

+0

@andras: Sí, lo que puedes modelar con un mapa ** es ** infinito. Pero debería haber clasificación/categorización/agrupamiento para estos modelos. Escogeré la respuesta que sea más fascinante/alucinante. – kiwicptn

Respuesta

1

Si su idioma permite que ambas matrices asociativas y puntero a funciones/procedimientos, se puede usar mapas para construir algo similar a Orientada a Objetos (ver Perl para un ejemplo clásico).

Consulte aquí para obtener un more detailed explanation.

+0

No estoy seguro de que lo entiendo, pero es interesante. ¿Puede dar un ejemplo? – kiwicptn

+0

Si observa cómo Perl agregó elementos OO al idioma, encontrará mucha información. Básicamente, si puede usar una "firma de método" como clave y un "puntero de función" como valor, puede usar un hashmap para agregar "comportamiento orientado a objeto". –

+0

Así que una firma de método (básicamente una cadena) se asigna a una función como 'paul -> dealWithPaul()'. Me hace pensar en el método de fábrica: 'pizza -> bakePizza()'. Bueno +1. – kiwicptn

5

Estructuras Sparse de datos (por ejemplo, una matriz dispersa o una matriz):

0 -> value 
1 -> value 
100 -> value 
105 -> value 

Además, yo diría que el ejemplo de "Presencia" que enumeró se hace mejor con una estructura de datos establecida (p. HashSet en Java o .NET) ya que la parte de "mapeo" del mapa realmente no es necesaria.

3

Recordando los resultados de función (caching, buffering, memoization)

10 -> 2 
20 -> 7 
30 -> zeroesIn(factorial(30)) 
0

Como dijo Eric Petroelje, tu ejemplo "presencia" se adapta mejor a un conjunto de un mapa.

Sin embargo, si desea realizar un seguimiento de la cantidad de apariciones de cosas, utilice un Mapa. Por ejemplo, usted quiere saber cuántas veces aparece una palabra dada en un documento:

pseudocódigo:

wordMap = map() 
for word in document: 
    if wordMap.containsKey(word): 
     wordMap[word]++ 
    else: 
     wordMap[word] = 1 

entonces si quiero saber cuántas veces la palabra 'mapa' aparece en el documento, Sería simplemente wordMap["map"]

+0

Reagruparía aquellos en "histogramas", p. número de ocurrencias por palabra, puntaje recibido por prueba, etc. – kiwicptn

0

Un mapa es una forma de representar un graph. Las claves son los nodos en el gráfico, y el valor para un nodo particular N es una lista de todos los nodos a los que N se conecta.

+0

'El valor ... es una lista. Cuando comienzas a pensar así (también' el valor es un mapa') el alcance de la pregunta explota. Me gustaría mantener esto simple con valores escalares (o de dimensión cero). – kiwicptn

2

Conversión

peter -> pierre 
john -> jean 
paul -> paul 
0

(Gracias por el retag, MatrixFrog.)

Dictionary (mapeo de un término para una definición)

"postulate" -> "demand or claim" 
"consulate" -> "residence of a foreign official" 

También en esta categoría

EADDRINUSE -> "Address in use." 
EADDRNOTAVAIL -> "Address not available." 
1

Pasando número arbitrario de parámetros opcionales a una función, en un idioma que no soporta ellos:

cars = findAvailableCars(make -> 'Toyota', model -> 'Prius', color -> 'green') 
Cuestiones relacionadas