我有以下哈希:
locals_arr = [{:rank=>1, :id=>6}, {:rank=>2, :id=>8}, {:rank=>3, :id=>7}]
我可以使用以下方式按ID搜索特定条目:
locals_arr.select{|x| x[:id].equal? 7}
返回类似的内容:
=> [{:rank=>3, :id=>7}]
现在我想知道这个条目的位置。
有时我会有一组经过筛选的排名,需要知道该组中的排名。
答案 0 :(得分:2)
请使用Array#index
。
locals_arr = [{:rank=>1, :id=>6}, {:rank=>2, :id=>8}, {:rank=>3, :id=>7}]
locals_arr.index{|h| h[:id]==6}
# => 0
locals_arr.index{|h| h[:id]== 8 }
# => 1
答案 1 :(得分:1)
locals_arr.index({:rank=>3, :id=>7})
答案 2 :(得分:1)
如果你想同时获得索引和对象本身,你可以使用each_with_index
,然后当你找到合适的break
时跳出来,如下所示:
irb(main):003:0> locals_arr = [{:rank=>1, :id=>6}, {:rank=>2, :id=>8}, {:rank=>3, :id=>7}]
irb(main):007:0> item, index = *locals_arr.each_with_index {|hash,i| break [hash,i] if hash[:id].equal? 7}
=> [{:rank=>3, :id=>7}, 2]
irb(main):008:0> item
=> {:rank=>3, :id=>7}
irb(main):009:0> index
=> 2
答案 3 :(得分:0)
您可以使用index metod:
locals_arr = [{:rank=>1, :id=>6}, {:rank=>2, :id=>8}, {:rank=>3, :id=>7}]
locols_arr.index(locals_arr.select{|x| x[:id].equal? 7}[0])
# => 2
或更短:
locals_arr.index{|e| e[:id] == 7}
# => 2