首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除Clojure 2D-vector中的nil

删除Clojure 2D-vector中的nil
EN

Stack Overflow用户
提问于 2020-11-28 19:43:52
回答 3查看 131关注 0票数 0

在Clojure中删除2D-Vector中的nils的最佳方法是什么?

代码语言:javascript
复制
[[250 634]] [[450 598] [250 651]] [[450 615] [250 668]] [[450 632] [250 685]] [[450 649] [259 700]] [[450 666] [323 700]] [[450 683] [386 700]] [nil nil] [nil nil] [nil nil] [nil nil] [nil nil] [nil nil] [nil nil]]
EN

回答 3

Stack Overflow用户

发布于 2020-11-29 09:05:46

代码语言:javascript
复制
user=> (def elems [[[250 634]] [[450 598] [250 651]] [[450 615] [250 668]] [[450 632] [250 685]] [[450 649] [259 700]] [[450 666] [323 700]] [[450 683] [386 700]] [nil nil] [nil nil] [nil nil] [nil nil] [nil nil] [nil nil] [nil nil]])
#'user/elems

user=> (remove #{[nil nil]} elems)
([[250 634]] [[450 598] [250 651]] [[450 615] [250 668]] [[450 632] [250 685]] [[450 649] [259 700]] [[450 666] [323 700]] [[450 683] [386 700]])
票数 2
EN

Stack Overflow用户

发布于 2020-11-28 19:49:42

代码语言:javascript
复制
(filter (fn [x] (every? not-nil x) your-vec)

通过确保子向量不只是充满nils来过滤向量。如果您想过滤掉任何带有nil的向量,请使用some而不是want?如果您想保留(可能为空的)子向量,则使用filter而不是every?:

代码语言:javascript
复制
(filter (fn [x] (filter not-nil x) your-vec)
票数 0
EN

Stack Overflow用户

发布于 2020-12-17 09:49:29

mapvmap的一个变体,它返回一个向量。以同样的方式,可以定义removev:返回向量的remove的变体:

代码语言:javascript
复制
(defn removev [pred v]
  (into [] (remove pred v)))

我们可以通过将其包装在一个集合#{[nil nil]}中来创建一个检测[nil nil]的谓词。

通过将这些组合在一起,我们得到了我们想要的:

代码语言:javascript
复制
(removev #{[nil nil]} [[1 3] [nil nil] [2 nil]])
=> [[1 3] [2 nil]]

我刚刚注意到,这个答案基本上与Denis Fuenzola's相同,只是这个答案将答案转换回一个向量。

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

https://stackoverflow.com/questions/65049199

复制
相关文章

相似问题

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