我想知道如何引用我已经分区的一系列列表中的最小元素:
data(map(keyword :counter)querieddata)
sortedlist(sort > tosort)
part(into [] (partition-all (/ (count data) 10) sortedlist))
zi(zipmap [:a :b :c :d :e :f :g :h :i] part)
给我的结果如下:
[:a(40 40 36 33) :b(33 30 27 25) :c(25 19 18 5)]
我想引用每个列表中的最小数字,例如在上面的列表中,我将为a返回数字33,为b返回25,依此类推。 我会假设我可以引用该关键字,然后使用apply max但我收到此错误的错误:
a(map(keyword :a)zi)
minimum(apply min a)
任何帮助都非常感谢!
答案 0 :(得分:1)
您的代码看起来并不像有效的Clojure,并且假设您的输入实际上是地图而不是矢量,那么这将起作用:
(into {}
(map (fn [[k v]]
[k (apply max v)])
{:a '(40 40 36 33)
:b '(33 30 27 25)
:c '(25 19 18 5)}))
; => {:a 40, :c 25, :b 33}
答案 1 :(得分:0)
从上一个结果值[:a(40 40 36 33) :b(33 30 27 25) :c(25 19 18 5)]
开始,您可以使用下一个函数:
(def your-result '[:a(40 40 36 33) :b(33 30 27 25) :c(25 19 18 5)])
(->> (map vec (partition 2 your-result))
(map #(vector (first %) (apply min (second %))))
(into {})
)
获取此输出
{:a 33 :b 25 :c 5}
然后您可以将关键字用作:
(:a (->> (map vec (partition 2 your-result))
(map #(vector (first %) (apply min (second %))))
(into {})
))
=> 33
答案 2 :(得分:0)
将min
应用于part
中的每个元素,然后zipmap
将结果应用于zi
:
smallest-numbers (map (partial apply min) part)
smallest-numbers-zipped (zipmap [:a :b :c :d :e :f :g :h :i] smallest-numbers)
此外,没有必要强制part
向量,除非特别需要在其他地方成为向量。如果将part
定义为(partition-all (/ (count data) 10) sortedlist)
,那么您提供给我们的代码也会正常工作。