Clojure的地图:钥匙和vals在相同的顺序? [英] Clojure's maps: are keys and vals in same order?

查看:124
本文介绍了Clojure的地图:钥匙和vals在相同的顺序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以依靠Clojure 1.3+中的
(= m(zipmap(keys m)(vals m)))



在某些情况下,这种行为使得代码稍显可读,例如

 (defn replace-keys [smap m] 
(zipmap(replace smap(keys m))(vals m)))

vs。

 (defn replace-keys [smap m] 
(into [}(for [[kv] m] [(smap kk)v]))


解决方案

是的,很多clojure会破坏,如果改变。



地图存储为树,两个函数走在同一棵树相同的顺序。


Is it ok to rely on (= m (zipmap (keys m) (vals m))) in Clojure 1.3+?

Having this behavior makes for slightly more readable code in some situations, eg

(defn replace-keys [smap m]
  (zipmap (replace smap (keys m)) (vals m)))

vs.

(defn replace-keys [smap m]
  (into {} (for [[k v] m] [(smap k k) v]))

解决方案

Yes, lots of clojure would break if that changed.

Maps are stored as trees and both functions walk the same tree in the same order.

这篇关于Clojure的地图:钥匙和vals在相同的顺序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆