'select`的短切版本不超过n个匹配

时间:2016-01-14 10:56:34

标签: ruby lazy-evaluation

我需要返回

的前三个元素
[1, 2, 3, 4, 5, 6, 7, 8].select{|e| e % 2 == 0}

[2, 4, 6],未尝试78。我希望它采取表格

select_some([1, 2, 3, 4, 5, 6, 7, 8], 3){|e| e % 2 == 0}

我有一个解决方案如下:

def select_some(array, n, &block)
  gather = []
  array.each do |e|
    next unless block.call e
    gather << e
    break if gather.size >= n
  end
  gather
end

但Ruby内置的内容是否可以执行此快捷方式?请不要建议我将一个方法修补到数组上以实现array.select_some

1 个答案:

答案 0 :(得分:5)

你可以使用一个懒惰的集合。类似的东西:

[1,2,3,4,5,6,7,8].lazy.select { |a| a.even? }.take(3)

您将获得Enumerator::Lazy,但您可以在需要数据时使用to_aforce