我想出了這一點:
(defn max-start-per-game [coll]
(into {} (map (fn [[k v]] [k (apply max (map :start v))])
(group-by :game game-vec))))
=> (max-start-per-game game-vec)
{1 523456, 2 523456, 3 173456}
的想法是讓在一個地方每場比賽的所有數據,然後取出開始的數據。然後就做一個最大的。
更一般的版本:
(defn collect [coll sum-key collect]
(into {} (map (fn [[k v]] [k (map :start v)])
(group-by :game game-vec))))
(defn no-good-name
[coll f key1 key2]
(into {} (map (fn [[k v]] [k (f v)])
(collect coll key1 key2)))
(no-good-name game-veC#(apply max %) :game :start)
=> {1 523456, 2 523456, 3 173456}
(使用costum功能(稱爲FMAP中的contrib地方)到地圖的所有值映射過會probebly甚至更好,但你可以做你自己)
我真的很喜歡多麼簡單本作的問題。這也是最不具破壞性的,因爲它可以保留任何其他可能存在的密鑰! – KushalP