1

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

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

或者,如果我有@product = Product.find(71),我将如何发现该对象与数字相关联0而不是1在上述数组中?

4

1 回答 1

4

您可以使用Array#indexwith 块,使用块参数解构(这里使用符号而不是您的自定义对象):

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(块参数将相同)。

于 2012-08-16T11:16:21.127 回答