【发布时间】:2014-01-18 19:19:24
【问题描述】:
我有一个字符串向量(尽管实际上可以是任何东西),我想创建一个新的映射条目向量,键是某个关键字。
例如,给定:
["foo" "bar" "baz"]
我想得到
[{:message "foo"} {:message "bar"} {:message "baz"}]
应用这种转换最惯用的方法是什么?
谢谢!
【问题讨论】:
标签: clojure
我有一个字符串向量(尽管实际上可以是任何东西),我想创建一个新的映射条目向量,键是某个关键字。
例如,给定:
["foo" "bar" "baz"]
我想得到
[{:message "foo"} {:message "bar"} {:message "baz"}]
应用这种转换最惯用的方法是什么?
谢谢!
【问题讨论】:
标签: clojure
这是一个见仁见智的问题。一些选项:
(into [] (for [x ["foo" "bar" "baz"]] {:message x}))
(mapv hash-map (repeat :message) ["foo" "bar" "baz"])
(mapv (partial assoc {} :message) ["foo" "bar" "baz"])
(reduce #(conj % {:message %2}) [] ["foo" "bar" "baz"])
【讨论】:
(map #(hash-map :message %) ["foo" "bar" "baz"])
我认为 A. Webb 提供了一些非常好的选择。
我的建议是为广大读者提供可读性:
(mapv (fn[x] {:message x}) ["foo" "bar" "baz"])
另外,如果你不需要矢量,
(map (fn[x] {:message x}) ["foo" "bar" "baz"])
将被更多人阅读。
【讨论】:
x 更具表现力的参数名称,例如msg 以覆盖更广泛的受众)。