查找嵌套数组中对象的位置

时间:2012-08-16 11:03:43

标签: ruby-on-rails ruby

在以下数组中,如何找到id = 71的产品位置?

[[[#<Product id: 71>, #<BigDecimal:x>], 0], [[#<Product id: 73>, #<BigDecimal:x>], 1]]

或者,如果我有@product = Product.find(71),我怎么会发现这个对象与上面数组中的数字0而不是1相关联?

1 个答案:

答案 0 :(得分:4)

您可以将Array#index与块一起使用,使用块参数解构(此处使用符号而不是自定义对象):

arr = [[[:a, :b], 5], [[:c, :d], 7]]
# => [[[:a, :b], 5], [[:c, :d], 7]] 
arr.index{|((a, b), c)| c == 7}
# => 1 
arr.index{|((a, b), c)| b == :a}
# => nil 
arr.index{|((a, b), c)| b == :b}
# => 0 

如果您对特定元素而不是索引感兴趣,只需使用find而不是index(块参数将是相同的)。