Clojure 从 zipmap 获得最高价值
Clojure getting highest value from zipmap
所以我在这里得到了我建议的 zip 地图,它工作得很好。如您所见,我已经加载了数据。
这就是它在 repl 中的样子,非常完美。
地图就在这里
:Year 2020, :Day 27, :January 59, :February 38
:Year 2020, :Day 28, :January 41, :February 57
:Year 2020, :Day 29, :January 56, :February 51
:Year 2020, :Day 31, :January 94, :February -999
:Year 2020, :Day 30, :January 76, :February -999
(map [:Day :Month
请记住,这只是我完成的代码片段。你会如何建议我找到一月份价值最高的一天?我所说的最高是指月份旁边的数字
(into(sorted-map-by >(fn [:January]))Ha)
我试过了没有成功,最后的“Ha”只是我初始化 zipmap 并使用 io/reader 读取文件的函数的名称
不确定您的确切数据结构是什么样的,但假设它是一个地图向量,您可以这样做:
(def data
[{:Year 2020, :Day 27, :January 59, :February 38}
{:Year 2020, :Day 28, :January 41, :February 57}
{:Year 2020, :Day 29, :January 56, :February 51}
{:Year 2020, :Day 31, :January 94, :February -999}
{:Year 2020, :Day 30, :January 76, :February -999}])
(->> data
(sort-by :January)
last
:January)
;; => 94
通过使用关键字作为函数对向量进行排序以在地图中查找其值,然后取一月份具有最高值的向量,然后从中获取属于键 :January
的值向量。如果您的数据结构看起来有点不同,请告诉我。
(def data [{:Year 2020, :Day 27, :January 59, :February 38}
{:Year 2020, :Day 28, :January 41, :February 57}
{:Year 2020, :Day 29, :January 56, :February 51}
{:Year 2020, :Day 31, :January 94, :February -999}
{:Year 2020, :Day 30, :January 76, :February -999}])
(reduce (partial max-key :January) data)
;; => {:Year 2020, :Day 31, :January 94, :February -999}
(:Day (reduce (partial max-key :January) data))
;; => 31
@Rulle 的回答很好。
没有 max-key
它将是:
(def data [{:Year 2020, :Day 27, :January 59, :February 38}
{:Year 2020, :Day 28, :January 41, :February 57}
{:Year 2020, :Day 29, :January 56, :February 51}
{:Year 2020, :Day 31, :January 94, :February -999}
{:Year 2020, :Day 30, :January 76, :February -999}])
(defn seq-max [seq greater key]
(reduce (fn [a b] (if (greater (key a) (key b)) a b)) seq))
;; if no key is wanted, choose the function `identity` as key!
;; e.g.
;; (seq-max (map :January data) > identity)
;; => 94
(:Day (seq-max data > :January)) ;; => 31
所以我在这里得到了我建议的 zip 地图,它工作得很好。如您所见,我已经加载了数据。
这就是它在 repl 中的样子,非常完美。 地图就在这里
:Year 2020, :Day 27, :January 59, :February 38
:Year 2020, :Day 28, :January 41, :February 57
:Year 2020, :Day 29, :January 56, :February 51
:Year 2020, :Day 31, :January 94, :February -999
:Year 2020, :Day 30, :January 76, :February -999
(map [:Day :Month
请记住,这只是我完成的代码片段。你会如何建议我找到一月份价值最高的一天?我所说的最高是指月份旁边的数字
(into(sorted-map-by >(fn [:January]))Ha)
我试过了没有成功,最后的“Ha”只是我初始化 zipmap 并使用 io/reader 读取文件的函数的名称
不确定您的确切数据结构是什么样的,但假设它是一个地图向量,您可以这样做:
(def data
[{:Year 2020, :Day 27, :January 59, :February 38}
{:Year 2020, :Day 28, :January 41, :February 57}
{:Year 2020, :Day 29, :January 56, :February 51}
{:Year 2020, :Day 31, :January 94, :February -999}
{:Year 2020, :Day 30, :January 76, :February -999}])
(->> data
(sort-by :January)
last
:January)
;; => 94
通过使用关键字作为函数对向量进行排序以在地图中查找其值,然后取一月份具有最高值的向量,然后从中获取属于键 :January
的值向量。如果您的数据结构看起来有点不同,请告诉我。
(def data [{:Year 2020, :Day 27, :January 59, :February 38}
{:Year 2020, :Day 28, :January 41, :February 57}
{:Year 2020, :Day 29, :January 56, :February 51}
{:Year 2020, :Day 31, :January 94, :February -999}
{:Year 2020, :Day 30, :January 76, :February -999}])
(reduce (partial max-key :January) data)
;; => {:Year 2020, :Day 31, :January 94, :February -999}
(:Day (reduce (partial max-key :January) data))
;; => 31
@Rulle 的回答很好。
没有 max-key
它将是:
(def data [{:Year 2020, :Day 27, :January 59, :February 38}
{:Year 2020, :Day 28, :January 41, :February 57}
{:Year 2020, :Day 29, :January 56, :February 51}
{:Year 2020, :Day 31, :January 94, :February -999}
{:Year 2020, :Day 30, :January 76, :February -999}])
(defn seq-max [seq greater key]
(reduce (fn [a b] (if (greater (key a) (key b)) a b)) seq))
;; if no key is wanted, choose the function `identity` as key!
;; e.g.
;; (seq-max (map :January data) > identity)
;; => 94
(:Day (seq-max data > :January)) ;; => 31