我希望获得数组中的所有真实值(在本例中是数值)。但一旦达到了极限,我就不想继续寻找真实的价值观。我最初的想法是这样做:
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中实现这一点?
发布于 2016-07-20 21:42:09
这可以通过lazy和first实现--这两种方法都是在Enumerable上定义的。
(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]发布于 2016-07-20 21:41:16
您可以使用#take_while
limit = 9
result = []
a.take_while do |i|
result << i if i
result.length - 1 < limit
end在Ruby中,除了nil和false之外,每个对象都是真实的。所以真实的支票是由if i这样做的。
发布于 2016-07-20 21:44:02
您可以使用直到或同时。
b = []
i = 0
until i > 10 || i = a.length
if a[i].is_a? Numeric
b << a[i]
i += 1
end
endhttps://stackoverflow.com/questions/38491217
复制相似问题