您如何将其余的哈希图作为Clojure中的新哈希值获得?

时间:2018-08-01 08:48:44

标签: clojure hashmap

如何将hasmap的其余部分作为clojure中的新hashamp获得?

如果我将哈希图传递给 rest ,我会返回向量列表

user=> (rest { 50 "L", 10 "X", 5 "V", 1 "I" })
([10 "X"] [5 "V"] [1 "I"])

如何将其转换为新的哈希图?

我需要执行此操作的功能

user=> (my-rest-func { 50 "L", 10 "X", 5 "V", 1 "I" })

{ 10 "X", 5 "V", 1 "I" }

更新:由于@AlephAleph提到Hashmap不能保证顺序,因此执行rest操作无法按预期工作。

2 个答案:

答案 0 :(得分:1)

user=> (into {} (rest { 50 "L", 10 "X", 5 "V", 1 "I" }))

{ 10 "X", 5 "V", 1 "I" }

答案 1 :(得分:1)

您仍然可以使用已排序的地图:

user> (def data (into (sorted-map-by >) { 50 "L", 10 "X", 5 "V", 1 "I" }))
#'user/data

user> data
;;{50 "L", 10 "X", 5 "V", 1 "I"}

user> (def rest-data (dissoc data (first (keys data))))
#'user/rest-data

user> rest-data
;;=> {10 "X", 5 "V", 1 "I"}

user> (sorted? rest-data)
true