我正在寻找一种更优雅的“Ruby-ists”方式来做到以下几点。有没有更清洁的方法呢?
i=0
array.each do |x|
break if x.empty?
puts x
i+=1
break if i>4
end
答案 0 :(得分:4)
我看到你在数组中的元素上调用#empty?
并在看到第一个空元素时退出。如果要保留该行为,可以执行以下操作:
array.first(4).each do |x|
break if x.empty?
puts x
end
更高级的方式是:
array.take_while { |i| !i.empty? }.first(4).each do |i|
puts i
end
我不确定你要打印多少个元素;请注意,我的示例将打印最多4个元素,而您的代码最多打印5个。
答案 1 :(得分:2)
我建议Array#first如下:
array.first(4).each do |x|
puts x
end
如果您只想接受第一个这么多非零条目,请使用Array#compact过滤掉它们:
array.compact.first(4).each do |x|
puts x
end
如果您担心空值,那么您仍然可以使用Array#reject链接过滤器:
array.reject(&:empty?).first(4).each do |x|
puts x
end
答案 2 :(得分:1)
另一种方式:
def printem(a,n)
puts a[0, [a.index(&:empty?) || n, n].min]
end
printem [[], [2],[3],[4],[5],[6]], 4
# <prints nothing>
printem [[1],[2], [],[4],[5],[6]], 4
# 1
# 2
printem [[1],[2],[3],[4],[5],[6]], 4
# 1
# 2
# 3
# 4
printem [[1],[2],[3],[4],[5],[6]], 7
# 1
# 2
# 3
# 4
# 5
# 6