Ruby grep和select筛选元素
在Enumerable模块中定义了grep()方法和select()方法,都可以用于筛选元素,还定义了它们元素取反的方法grep_v()和reject()。此外,select()还有别名方法find_all()和filter()。
但是grep()和select()是不同的,如果只考虑筛选元素,那么grep可以看作是select()的特例,grep采用===
进行筛选,而select()根据给定的条件进行筛选。
例如:
1 | obj = ["a", "b", "c", 1, 2, 3, nil] |
筛选出其中的字符串元素:
筛选出非空元素:
1 | obj.grep_v(NilClass) #=> ["a", "b", "c", 1, 2, 3] |
可以根据正则表达式进行筛选,因为正则表达式定义了===
运算:
1 | obj = %w(perl shell php python) |
可以筛选在范围内的元素:
1 | nums = [9, 10, 11, 20] |
grep()除了单纯的筛选,还允许跟一个语句块对筛选出的数据做处理,并返回处理后的结果。这等价于select + map的效果。
1 | nums = [9, 10, 11, 20] |
Ruby 2.7提供了filter_map()方法:
1 | nums.filter_map {|x| x * 2 if (5..10) === x } |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 骏马金龙!
评论