我有这样的地图:
{:a 1 :b 20}
Run Code Online (Sandbox Code Playgroud)
:我想确保地图上没有丢失某些字段:
(:a :b :c :d )
Run Code Online (Sandbox Code Playgroud)
:是否有合并两者的功能,如:
(merge-missing-keys {:a 1 :b 20} (:a :b :c :d ))
Run Code Online (Sandbox Code Playgroud)
:哪个可以产生:
{:a 1 :b 20 :c nil :d nil}
Run Code Online (Sandbox Code Playgroud)
?
根据答案的一些指示,我发现这可以这样做:
(defn merge-missing-keys [
a-set
some-keys
]
(merge-with
#(or %1 %2)
a-set
(into {} (map (fn[x] {x nil}) some-keys))))
(merge-missing-keys {:a 1 :b 20} '(:a :b :c :d :e ))
Run Code Online (Sandbox Code Playgroud)
你应该使用merge-with:
返回一个映射,该映射由第一个映射的其余映射组成.如果一个键出现在多个映射中,则后者(从左到右)的映射将通过调用(f val-in-result val-in-later)与结果中的映射组合.
因此,以下内容将合并所有地图与从地图中选择的一个实际值nil.
(merge-with #(or %1 %2)
{:a 1 :b 2}
{:a nil :b nil :c nil :d nil})
; -> {:d nil :c nil :b 2 :a 1}
Run Code Online (Sandbox Code Playgroud)
这可能足以让您构建实现.
| 归档时间: |
|
| 查看次数: |
5078 次 |
| 最近记录: |