内置Ruby或ActiveSupport函数用于“选择满足谓词的前n个元素”?

时间:2016-12-21 03:43:33

标签: ruby activesupport

我正在寻找一个require.config({ waitSeconds: 200, paths: { 'wicket': '/Vendor/Wicket/wicket', 'wicketGmap3': '/Vendor/Wicket/wicket-gmap3' }, shim: { wicket: { exports: 'Wkt' }, wicketGmap3: { deps: ['wicket'] } }, }); require(['wicket', 'wicketGmap3'],(Wkt) => { $(() => { angular.bootstrap(document, ['app']); }); }); 一旦它返回一定数量的项目就会“短路”:

select

是否有核心或ActiveSupport中的库函数可以执行此操作?我很容易自己动手,但我想我会检查一下。

请注意,我不想>>> [1, 2, 3, 4, 5].select_first(1) { |x| x.odd? } [1] >>> [1, 2, 3, 4, 5].select_first(2) { |x| x.odd? } [1, 3] >>> [1, 2, 3, 4, 5].select_first(1000) { |x| x.odd? } [1, 3, 5] ,因为该块可能有副作用。

1 个答案:

答案 0 :(得分:3)

你可以按照

的方式做点什么
[1, 2, 3, 4, 5].lazy.select{|x| x.odd? }.take(n).to_a

但如果你想避免select{ . . }.take(n),你也可以这样做:

[1, 2, 3, 4, 5].each{|x| arr << x if x.odd?; break if arr.count == n}