迭代数组的前n个元素 - 如果存在多个元素

时间:2015-02-11 21:11:34

标签: ruby

我正在寻找一种更优雅的“Ruby-ists”方式来做到以下几点。有没有更清洁的方法呢?

i=0
array.each do |x|
    break if x.empty?
    puts x
    i+=1
    break if i>4
end

3 个答案:

答案 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