es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertir una lista de mapas por los valores de los mapas [Clojure]

Tengo una lista llena de muchos mapas (todos ellos tienen la misma clave), como este:

({:a 1} {:a 1} {:a 2} {:a 2} {:a 3} {:a 2})

Me gustaría convertirlo en un mapa que almacena la ocurrencia del valor de cada mapa. Por ejemplo, la lista de arriba debería devolver el siguiente mapa:

{:1 2, :2 3, :3 1}

¿Alguna idea de cómo puedo hacer eso?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una solución para convertir la lista de mapas en un mapa que almacena la ocurrencia del valor de cada mapa utilizando Clojure es:

    (defn contar-ocurrencias [lst]
      (->> lst
           (map :a)
           (frequencies)))
    
    (contar-ocurrencias '({:a 1} {:a 1} {:a 2} {:a 2} {:a 3} {:a 2})) ;=> {:1 2, :2 3, :3 1}
    

    Explicación:

    1. Definir una función contar-ocurrencias que toma una lista lst como entrada.
    2. Usar el macro de enhebrado ->> para pasar la lista de entrada lst a través de múltiples formas, una a la vez.
    3. La primera forma mapea la palabra clave :a sobre cada mapa de la lista, extrayendo el valor asociado con la clave :a.
    4. La segunda forma utiliza la función frequencies para contar las ocurrencias de cada valor en la secuencia resultante de números.
    5. El mapa resultante contiene el recuento de cada valor distinto en la lista original de mapas.

Comments are closed.