在以下数组中,如何找到id = 71的产品位置?
[[[#<Product id: 71>, #<BigDecimal:x>], 0], [[#<Product id: 73>, #<BigDecimal:x>], 1]]
或者,如果我有@product = Product.find(71)
,我怎么会发现这个对象与上面数组中的数字0
而不是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
(块参数将是相同的)。