Ruby数组:仅保留数组末尾的重复值

Ruby数组:仅保留数组末尾的重复值,ruby,arrays,Ruby,Arrays,如果我有一个数组: [[1, "foo"], [2, "bar"], [3, "foo"], [4, "foo"], [5, "bar"], [6, "baz"]] 如何消除重复值,将重复值保留在数组的末尾,从而导致: [[4, "foo"], [5, "bar"], [6, "baz"]] 谢谢 我尝试过许多方法,例如遵循荒谬的路线,但都没有成功 a.delete_if {|q| q if q[1] in a} # syntax error a.each {|q| q.shift i

如果我有一个数组:

[[1, "foo"], [2, "bar"], [3, "foo"], [4, "foo"], [5, "bar"], [6, "baz"]]
如何消除重复值,将重复值保留在数组的末尾,从而导致:

[[4, "foo"], [5, "bar"], [6, "baz"]]
谢谢

我尝试过许多方法,例如遵循荒谬的路线,但都没有成功

a.delete_if {|q| q if q[1] in a}   # syntax error

a.each {|q| q.shift if q[1] in a[q][1]} # syntax error
还有更多

这应该可以做到:

a.reverse.uniq(&:last).reverse
=> [[4, "foo"], [5, "bar"], [6, "baz"]]

使用Ruby的技术也可以解决这个问题:

散列是唯一键及其值的类似字典的集合。也称为关联数组

更新为@Uri建议-

Hash[array].invert.invert.to_a

您需要定义重复值的含义。根据您的示例,您的意思是,如果b跟在a后面,并且b.last==a.last.FYI,那么b是a的重复值,出现语法错误的原因是in与Ruby中的工作方式不同。我猜你在寻找类似Python中数组理解的东西?@Ajedi32,没错,我对Ruby比较陌生,去年学会了用Python编程。酷。我不想在这里讨论太多细节,因为这些注释并不是真正用于扩展讨论,但基本上Ruby中的块更像是循环,而不是数组理解。这可能会让你感兴趣:相反:为什么不简单地散列[array].invert.invert.to_a?@urigassi谢谢..:-
Hash[array].invert.invert.to_a
 arr.group_by{|x|x[1]}.values.map(&:last)