gpt4 book ai didi

clojure - 何时使用 `zipmap` 何时使用 `map vector` ?

转载 作者:行者123 更新时间:2023-12-03 10:50:53 25 4
gpt4 key购买 nike

我在问 zipmap 的特殊性构造只是发现我显然做错了。于是我了解到(map vector v u)正在进行中。但在此之前,我曾使用 zipmap 来做 (map vector ...)的工作。那么它是否有效,因为生成的 map 小到可以整理出来?

对于实际问题:有什么用 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)

最佳答案

当您想要 时使用 (zipmap ...)直接构造hashmap 来自不同的键和值序列。输出是一个哈希图:

(zipmap [:k1 :k2 :k3] [10 20 40])
=> {:k3 40, :k2 20, :k1 10}

尝试使用 (map vector ...) 时 合并多个序列 .输出是 向量的惰性序列 :
(map vector [1 2 3] [4 5 6] [7 8 9])
=> ([1 4 7] [2 5 8] [3 6 9])

一些额外的注意事项:
  • Zipmap 仅适用于两个输入序列(键 + 值),而映射向量可以适用于任意数量的输入序列。如果您的输入序列不是键值对,那么这可能是一个很好的提示,您应该使用 map vector 而不是 zipmap
  • zipmap 将比做映射向量然后从键/值对创建一个哈希映射更有效和更简单 - 例如(into {} (map vector [:k1 :k2 :k3] [10 20 40]))做 zipmap 的方法很复杂
  • map vector 是惰性的——所以它带来了一些额外的开销,但在你真正需要惰性的情况下(例如处理无限序列时)非常有用
  • 您可以执行 (seq (zipmap ....)) 来获取键值对序列,而类似于 (map vector ...),但请注意,这可能会重新排序键值对序列(因为中间哈希图是无序的)
  • 关于clojure - 何时使用 `zipmap` 何时使用 `map vector` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6135764/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com