这让我多次思考.在这个例子中我有一个数组,这个数组有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
Run Code Online (Sandbox Code Playgroud)
但这是如此肮脏,没有任何方法可以找出当前对象(在本例中为"name")是第一个还是迭代中的最后一个?
chr*_*nda 25
在这种具体情况下,data.join(', ')会更常见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
Run Code Online (Sandbox Code Playgroud)