我问的是zipmap构造的特殊性只是发现我显然做错了.所以我(map vector v u)在这个过程中学到了很多.但在此案例之前,我曾使用过zipmap来完成(map vector ...)工作.它是否有用,因为结果地图足够小,可以整理出来?
而对于实际问题:有什么用途zipmap,以及如何/何时使用它.什么时候使用(map vector ...)?
我原来的问题需要原始订单,所以映射任何东西都不是一个好主意.但基本上 - 除了结果对的顺序 - 这两种方法是等价的,因为seq'd map变成了一系列向量.
(for [pair (map vector v (rest v))]
( ... )) ;do with (first pair) and (last pair)
(for [pair (zipmap v (rest v))]
( ... )) ;do with (first pair) and (last pair)
Run Code Online (Sandbox Code Playgroud)
mik*_*era 37
当您想要从单独的键和值序列直接构造散列映射时,请使用(zipmap ...).输出是一个hashmap:
(zipmap [:k1 :k2 :k3] [10 20 40])
=> {:k3 40, :k2 20, :k1 10}
Run Code Online (Sandbox Code Playgroud)
在尝试合并多个序列时使用(映射矢量...).输出是一个懒惰的向量序列:
(map vector [1 2 3] [4 5 6] [7 8 9])
=> ([1 4 7] [2 5 8] [3 6 9])
Run Code Online (Sandbox Code Playgroud)
需要考虑的其他注意事项:
(into {} (map vector [:k1 :k2 :k3] [10 20 40]))是一个非常复杂的方法来做zipmap这些方法或多或少是等价的.当您使用zipmap时,您将获得一个包含键/值对的地图.当您遍历此地图时,您将获得[键值]向量.但是没有定义地图的顺序.使用第一种方法中的"map"构造,可以创建一个包含两个元素的向量列表.订单已定义.
在您的示例中,Zipmap可能效率稍低.我会坚持使用'地图'.
编辑:哦,而且zipmap不是懒惰的.所以在你的例子中不使用它的另一个原因.
编辑2:当您真正需要地图时使用zipmap,例如快速随机基于密钥的访问.