将来自“ any”和“ include”的结果推入数组

时间:2019-01-04 15:11:46

标签: ruby

此:

arry = %w[cat dog fish]
arry.any? {|s| pp s.include?('sh')}

输出:

false
false
true

当我尝试通过这样做将元素推入数组时,

tester = []
arry = %w[cat dog fish]
arry.any? {|s| tester << s.include?('sh')}

pp tester

它输出:

[false]

仅推送一个元素。不知道为什么我不能将结果从include?推入数组。

如何将所有结果放入数组?

1 个答案:

答案 0 :(得分:5)

Enumerable#any?一旦该块返回truthy值,便立即退出。

我不确定您为什么会在此用例中使用any?,但实际上是:在第一次迭代时,该块返回了一个真实的数组。

改为使用#each_with_object或什至简单的#map

arry.each_with_object([]) { |s, tester| tester << s.include?('sh') }
arry.map { |s| s.include?('sh') }

我的最爱:

arry.map(&/sh/.method(:!~)).map(&:!)