首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在给定的限制内获取数组中的所有真实值。

在给定的限制内获取数组中的所有真实值。
EN

Stack Overflow用户
提问于 2016-07-20 21:32:59
回答 3查看 261关注 0票数 0

我希望获得数组中的所有真实值(在本例中是数值)。但一旦达到了极限,我就不想继续寻找真实的价值观。我最初的想法是这样做:

代码语言:javascript
复制
a.select do |n|
  puts "value #{n}"
  n.is_a? Numeric
end.slice(0..9)

value 1
value 2
value 3
value 4
value 5
value 6
value 7
value 8
value 9
value 10
value 11
value 12
value 13
value 14
value 15
 => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

虽然它给了我正确的结果,但它仍然搜索每一个记录。我要它在我到达极限的时候停止搜索。

我如何在Ruby中实现这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-20 21:42:09

这可以通过lazyfirst实现--这两种方法都是在Enumerable上定义的。

代码语言:javascript
复制
(1..20).lazy.select do |n|
  puts "value #{n}"
  n.is_a? Numeric
end.first(10)
#=> value 1
#=> value 2
#=> value 3
#=> value 4
#=> value 5
#=> value 6
#=> value 7
#=> value 8
#=> value 9
#=> value 10
#=> [1,2,3,4,5,6,7,8,9,10]
票数 3
EN

Stack Overflow用户

发布于 2016-07-20 21:41:16

您可以使用#take_while

代码语言:javascript
复制
limit = 9
result = []
a.take_while do |i| 
  result << i if i
  result.length - 1 < limit
end

在Ruby中,除了nilfalse之外,每个对象都是真实的。所以真实的支票是由if i这样做的。

票数 1
EN

Stack Overflow用户

发布于 2016-07-20 21:44:02

您可以使用直到或同时。

代码语言:javascript
复制
b = []
i = 0
until i > 10 || i = a.length
  if a[i].is_a? Numeric
    b << a[i]
    i += 1
  end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38491217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档