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

这让我多次思考。 在这个例子中我有一个数组,这个数组有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”)是第一个还是迭代中的最后一个?

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

你需要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 

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

否则直接使用

 data.join(', ')