0

我想知道如何引用我分区的一系列列表中的最小元素,如下所示:

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)

非常感谢任何帮助!

4

3 回答 3

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}
于 2013-11-13T20:23:08.907 回答
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).

于 2013-11-14T05:17:31.590 回答
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

于 2013-11-13T20:23:07.550 回答