如何确定记录是否是迭代中的第一个/最后一个?

时间:2011-10-22 11:10:14

标签: ruby

这让我多次思考。在这个例子中,我有一个数组,这个数组有10个值,应该由commatas分隔,但在最后一个之后不应该有一个逗号,所以我使用了一个计数器:

data = ["john", "james", "henry", "david", "daniel", "jennifer", "ruth", "penny", "robin", "julia"]
counter = 0 
count = data.size
sentence = String.new
data.each do |name|
     if counter == (count-1)
          sentence += name
     else
          sentence += "#{name}, "
     end
     counter += 1
end

但这是如此肮脏,没有任何方法可以找出当前对象(在本例中为“name”)是否是迭代中的第一个或最后一个?

3 个答案:

答案 0 :(得分:25)

在这种特定情况下,data.join(', ')会这样做,更常见的是data.each {|d| #do stuff unless d.equal? data.last}

答案 1 :(得分:8)

你应该写data.join(', ')。无论如何,回答你的问题:

  

是否有任何方法可以确定当前对象(在本例中为“name”)是迭代中的第一个还是最后一个?

xs = [1, 2, 3, 4]
xs.each.with_index do |x, index|
  if index == 0
    puts("First element: #{x}")
  elsif index == xs.size - 1
    puts("Last element: #{x}")
  else
    puts("Element somewhere in the middle: #{x}")
  end
end

答案 2 :(得分:5)

如果您的数组具有唯一元素,则可以使用name==data.last

否则直接使用

data.join(', ')