首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何筛选和反筛选数组?

如何筛选和反筛选数组?
EN

Stack Overflow用户
提问于 2013-06-07 19:10:51
回答 2查看 94关注 0票数 1

我有一个数组:

代码语言:javascript
复制
arr = [1,1,2,3,5,8,13,21,34]

我想以与select相同的方式过滤数组,但也要分别收集所有不符合条件的元素:

代码语言:javascript
复制
[evens, odds] = arr.split_filter {|p| p % 2 == 0}
# evens = [2, 8, 34]
# odds  = [1, 1, 3, 5, 13, 21]

我能做到

代码语言:javascript
复制
evens = arr.select {|p| p % 2 == 0}
odds  = arr.select {|p| p % 2 != 0}

但这似乎是低效的。有没有人知道像split_filter这样的函数

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-07 19:12:23

你在找Enumerable#partition

代码语言:javascript
复制
arr = [1,1,2,3,5,8,13,21,34]

evens, odds = arr.partition{|a| a % 2 == 0}

evens # => [2, 8, 34]
odds # => [1, 1, 3, 5, 13, 21]

或者,简称为:

代码语言:javascript
复制
evens, odds = arr.partition(&:even?)
票数 12
EN

Stack Overflow用户

发布于 2013-06-07 19:55:17

我们总是可以使用Enum#group_by来做同样的事情。

代码语言:javascript
复制
arr = [20,1,1,2,3,5,8,13,21,34]
even,odd = arr.group_by(&:even?).values_at(true,false)
even #=> [20, 2, 8, 34]
odd #=> [1, 1, 3, 5, 13, 21]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16982700

复制
相关文章

相似问题

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