这:

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?推送到数组中。
如何将所有结果放入数组中?

最佳答案

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(&:!)

关于ruby - 将来自“any”和“include”的结果插入数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54041569/

10-09 08:38