ruby - 如何与 `each` 迭代器中的前一项进行比较?

标签 ruby enumerable

更新:抱歉,我修正了我的程序:

a = [ 'str1' , 'str2', 'str2', 'str3'  ]
name = ''
a.each_with_index do |x, i |
  if x == name
    puts "#{x} found duplicate."
  else 
    puts x
    name = x  if i!= 0 
  end
end



     output: 
str1
str2
str2 found duplicate.
str3

ruby 语言中是否有另一种漂亮的方式来做同样的事情?

顺便说一句,实际上。 a 在我的真实案例中是一个 ActiveRecord::Relation

谢谢。

最佳答案

each_cons 可能遇到的问题是它遍历 n-1 对(如果 Enumerable 的长度是 n) .在某些情况下,这意味着您必须单独处理第一个(或最后一个)元素的边缘情况。

在那种情况下,实现 method 真的很容易类似于 each_cons,但它会为第一个元素产生 (nil, elem0)(与 each_cons 相对,后者产生 ( elem0, elem1):

module Enumerable
  def each_with_previous
    self.inject(nil){|prev, curr| yield prev, curr; curr}
    self
  end
end

关于ruby - 如何与 `each` 迭代器中的前一项进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9517153/

相关文章:

c# - foreach循环,在循环语句外导出迭代集合是不是更快?

c# - 如何创建具有 n 个字节的数组?

ruby-on-rails - rails 3.2 使用事件管理员 0.5.5 member_action 获取路由错误

ruby - 使用 ruby​​ 将存储为有符号的无符号整数转换回原始值

ruby - 按数字(从大到大)然后按字母(字母顺序)对对象集合进行排序

c# - 为什么 Enumerable 不继承自 IEnumerable<T>

delphi - 在 Delphi Prism 中将 int 转换为 Enum

ruby-on-rails - ruby on rails,在这种情况下如何使用 try() 方法

ruby - 枚举器中的当前对象

ruby-on-rails - 使用 ruby​​ on Rails 进行定时服务器事件