鉴于:
{:o {:i1 1
:i2 {:ii1 4}}}
Run Code Online (Sandbox Code Playgroud)
我想从根作为向量以“绝对”形式迭代地图的键。所以我想:
{
[:o :i1] 1
[:o :i2 :ii1] 4
}
Run Code Online (Sandbox Code Playgroud)
作为结果。基本上只得到叶节点。
我认为更好的版本,使用for而不是mapcat:
(defn flatten-keys [m]
(if (not (map? m))
{[] m}
(into {}
(for [[k v] m
[ks v'] (flatten-keys v)]
[(cons k ks) v']))))
Run Code Online (Sandbox Code Playgroud)
该函数自然是递归的,非映射最方便的基本情况是“这个值,没有keyeq 导致它”。对于映射,您可以调用flatten-keys映射中的每个值,并将其键添加到结果映射的每个键序列中。