【问题标题】:Sorting vectors in Clojure map of vectors在 Clojure 向量图中对向量进行排序
【发布时间】:2016-11-12 06:45:19
【问题描述】:

我有一张矢量地图,如下所示:

{2 ["a" "c" "b"], 1 ["z" "y" "x"]}

我想得到一个按key排序的map,然后每个对应的vector也排序,像这样:

{1 ["x" "y" "z"], 2 ["a" "b" "c"]}

我知道我可以通过执行(into (sorted-map) themap) 来按键排序,并且我知道我可以为into 提供一个传感器,但我对传感器的外观不太了解。这是我尝试过的换能器:

(defn xform [entry]
  (vector (first entry) (vec (sort (second entry)))))

但是,当我尝试将它应用到我的地图时,我得到了这个异常:

java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.core$conj__4345

我怎样才能让它工作?有没有比将into 与换能器一起使用更好的方法?

【问题讨论】:

  • 你几乎明白了。您刚刚错过了使用map 函数创建map 转换器。 (map xform),尽管您不应该将此函数称为 xform,因为它还不是转换器,而只是一个函数。

标签: sorting vector clojure


【解决方案1】:

像这样:

(into (sorted-map)
      (map (fn [[k v]] [k (vec (sort v))]))
      {2 ["a" "c" "b"], 1 ["z" "y" "x"]})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    相关资源
    最近更新 更多