DEV Community

Francisco Zanfranceschi
Francisco Zanfranceschi

Posted on

[Desafio] - Agregação de Registros

Conteúdo original em https://twitter.com/zanfranceschi/status/1679497149732585472


Ei dev,

Pega esse desafio de agregação de registros!

Dado registros granulares que contêm data e quantidade, crie uma função que os agregue por data em um dicionário e some os atributos "qtd". O código a seguir explica melhor o desafio.

# dado os seguintes registros
registros = [{"data" : "2023-07-13", "qtd" : 12},
             {"data" : "2023-07-14", "qtd" : 30},
             {"data" : "2023-07-13", "qtd" : 4},
             {"data" : "2023-07-14", "qtd" : 98},
             {"data" : "2023-07-12", "qtd" : 4},
             {"data" : "2023-07-12", "qtd" : 8},
             {"data" : "2023-07-12", "qtd" : 31},
             {"data" : "2023-07-15", "qtd" : 74},
             {"data" : "2023-07-13", "qtd" : 12},
             {"data" : "2023-07-12", "qtd" : 1},
             {"data" : "2023-07-17", "qtd" : 3},
             {"data" : "2023-07-16", "qtd" : 35}]

# desenvolva uma função de agrupamento
resultado = agrupar(registros)

# que retorne o seguinte resultado
{"2023-07-13" : 28,
 "2023-07-14" : 128,
 "2023-07-12" : 44,
 "2023-07-15" : 74,
 "2023-07-17" : 3,
 "2023-07-16" : 35}`
Enter fullscreen mode Exit fullscreen mode

Se alguém tiver curiosidade sobre como isso poderia ser feito em Clojure, aí está.

(defn agrupar
  [registros]
  (into {} (map (fn [i]
                  [(first i)
                   (->> (map :qtd (second i))
                        (reduce +))])
                (group-by :data registros))))

(agrupar [{:data "2023-07-13", :qtd 12}
          {:data "2023-07-14", :qtd 30}
          {:data "2023-07-13", :qtd 4}
          {:data "2023-07-14", :qtd 98}
          {:data "2023-07-12", :qtd 4}
          {:data "2023-07-12", :qtd 8}
          {:data "2023-07-12", :qtd 31}
          {:data "2023-07-15", :qtd 74}
          {:data "2023-07-13", :qtd 12}
          {:data "2023-07-12", :qtd 1}
          {:data "2023-07-17", :qtd 3}
          {:data "2023-07-16", :qtd 35}])
Enter fullscreen mode Exit fullscreen mode

Top comments (0)