在Clojure向量映射中对向量进行排序

4

我有一个向量图,就像这样:

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

我希望得到一个按键排序的地图,然后每个对应的向量也被排序,就像这样:
{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,因为它还不是一个转换器,仅仅是一个函数而已。 - ClojureMostly
1个回答

6

像这样:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接