首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何减少嵌套集合而不使用可变状态?

如何减少嵌套集合而不使用可变状态?
EN

Stack Overflow用户
提问于 2013-04-28 19:30:51
回答 1查看 190关注 0票数 1

给定一个嵌套集合,我想将其简化为k-v对,这是表单_D,其中D是整数。例如,我想转换如下:

代码语言:javascript
复制
; Start with this  ...
{:a {:val 1 :val 2} :b {:val 3 :c {:val 4}} :val 5}

; ... end with this
{:val 1, :val 2, :val 3, :val 4, :val 5}

我编写了一个函数,使用postwalk,如下所示:

代码语言:javascript
复制
(defn mindwave-values [data]
  (let [values       (atom {})
        integer-walk (fn [x]
                       (if (map? x)
                         (doseq [[k v] x]
                           (if (integer? v) (swap! values assoc k v)))
                         x))]
    (postwalk integer-walk data)
    @values))

我很好奇,在不使用可变状态的情况下,是否可以做到这一点?

编辑原始函数不完全正确。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-28 20:43:15

您的示例数据结构不是合法的映射,所以我对它做了一些修改:

代码语言:javascript
复制
(defn int-vals [x]
  (cond (map? x) (mapcat int-vals x)
        (coll? x) (when (= 2 (count x))
                    (if (integer? (second x))
                      [x]
                      (int-vals (second x))))))

user> (int-vals {:a {:x 1 :y 2} :b {:val 3 :c {:val 4}} :val 5})
([:y 2] [:x 1] [:val 4] [:val 3] [:val 5])

您的要求有点模糊:您说的是“集合”,但是您的示例只包含地图,所以我只能猜测您的意图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16266894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档