Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
排序嵌套映射Clojure_Clojure - Fatal编程技术网

排序嵌套映射Clojure

排序嵌套映射Clojure,clojure,Clojure,我正在尝试按键值对地图进行排序。根据这张地图: {:1 {:bar "something" :rank 10} :2 {:bar "other" :rank 20}} 我喜欢按rankvalue对其进行排序: {:2 {:bar "other" :rank 20} :1 {:bar "something" :rank 10} } 是否可以使用排序方式 提前感谢使用排序方式非常简单,但由于它是按升序排序的,因此您必须使用反向才能使其正确运行 (reverse (sort-by (com

我正在尝试按键值对地图进行排序。根据这张地图:

{:1 {:bar "something" :rank 10} :2 {:bar "other" :rank 20}}
我喜欢按
rank
value对其进行排序:

{:2 {:bar "other" :rank 20} :1 {:bar "something" :rank 10} }
是否可以使用
排序方式


提前感谢

使用
排序方式
非常简单,但由于它是按升序排序的,因此您必须使用
反向
才能使其正确运行

(reverse
    (sort-by (comp :rank second)
        {:1 {:bar "something" :rank 10} :2 {:bar "other" :rank 20}}))

排序方式采用键函数和可选的自定义比较器

;              keyfn         comparator
(sort-by (comp :rank second) > 
  {:1 {:bar "something" :rank 10} :2 {:bar "other" :rank 20}})
;=> ([:2 {:bar "other", :rank 20}] [:1 {:bar "something", :rank 10}])
另见

升序:

user=> (sort-by (comp :rank second) < {:1 {:bar "something" :rank 10} :2 {:bar "other" :rank 20} :3 {:bar "bar" :rank 15}})
([:1 {:bar "something", :rank 10}] [:3 {:bar "bar", :rank 15}] [:2 {:bar "other", :rank 20}])

这两种方法都返回map元素的序列,要再次转换回map,将其包装在
(到{}…
中,其他答案也可以,但是如果您要经常执行此命令,那么最好将数据存储在。它是为这种情况设计的

优先级映射非常类似于排序映射,但排序映射生成按键排序的条目序列,而优先级映射生成按值排序的条目

;您需要首先将[org.clojure/data.priority-map“0.0.7”]添加到:依赖项
user=>(需要“[clojure.data.priority-map:as-pm]”)
; 无
用户=>(pm/优先级映射键fn by:rank>
:1{:栏“某物”:排名10}
:2{:栏“其他”:排名20})
; {:2{:排名20,:bar“other”},:1{:排名10,:bar“something”}

这不起作用。添加另一个排名为15的元素作为元素3,你会发现它没有排序,你只得到了10和20,碰巧它们是按你想要的顺序排序的是的,我只是在玩它。它似乎是按字典排序的,这不是我想要的。也谢谢你的回答。我也很高兴知道这件事。
user=> (sort-by (comp :rank second) > {:1 {:bar "something" :rank 10} :2 {:bar "other" :rank 20} :3 {:bar "bar" :rank 15}})
([:2 {:bar "other", :rank 20}] [:3 {:bar "bar", :rank 15}] [:1 {:bar "something", :rank 10}])