【问题标题】:Converting a set to a vector results in a vector of nested vectors in Clojure将集合转换为向量会在 Clojure 中生成嵌套向量的向量
【发布时间】:2019-08-21 11:51:39
【问题描述】:

我是 clojure 的新手,想知道为什么当我将集合转换为向量时,结果向量是嵌套向量的向量。

例如,我有这个 Lazy Seq 类型的集合

(#{:fox :corn} #{:boat} #{})

这是运行的结果,

(map #(disj (set %) :goose :you) [[:fox :goose :corn :you] [:boat] []])

我想遍历集合并获取向量

[[:fox :corn] [:boat] []]

但我能想到的最好的代码是

(for [i non-vec] (conj (empty []) (vec i)))

“non-vec”是上面的惰性序列。

但是运行命令会产生以下结果

([[:fox :corn]] [[:boat]] [[]])

也是惰性序列类型。

我想知道

1:如何得到预期的向量

2:为什么输出是惰性序列类型,而我将它连接到一个空向量

【问题讨论】:

    标签: clojure clojurescript


    【解决方案1】:

    问题一: 我想你正在寻找

    (mapv vec '(#{:fox :corn} #{:boat} #{})) ;; [[:fox :corn] [:boat] []]
    

    问题二: 我认为这是因为for 产生了一个惰性序列

    【讨论】:

    • 感谢您提供这段代码。像魅力一样工作。
    【解决方案2】:

    如果你可以使用列表:

    (map #(remove #{:goose :you} %) [[:fox :goose :corn :you] [:boat] []])
    

    如果没有:

    (mapv #(into [] (remove #{:goose :you} %)) [[:fox :goose :corn :you] [:boat] []])
    

    【讨论】:

      猜你喜欢
      • 2021-12-25
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      相关资源
      最近更新 更多