如何在使用每个元素迭代数组时从数组中获取当前元素的下一个和之前的内容。
array.each do |a|
# I want to fetch next and before current element.
end
答案 0 :(得分:37)
看看Enumerable#each_cons
方法:
[nil, *array, nil].each_cons(3){|prev, curr, nxt|
puts "prev: #{prev} curr: #{curr} next: #{nxt}"
}
prev: curr: a next: b
prev: a curr: b next: c
prev: b curr: c next:
如果您愿意,可以将其包装在新的Array方法中:
class Array
def each_with_prev_next &block
[nil, *self, nil].each_cons(3, &block)
end
end
#=> nil
array.each_with_prev_next do |prev, curr, nxt|
puts "prev: #{prev} curr: #{curr} next: #{nxt}"
end
答案 1 :(得分:11)
您可以使用Enumerable#each_with_index
在迭代时获取每个元素的索引,并使用它来获取周围的项目。
array.each_with_index do |a, i|
prev_element = array[i-1] unless i == 0
next_element = array[i+1] unless i == array.size - 1
end