我有以下哈希:
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}]
现在我想知道这个条目的位置。
有时我有一组过滤的等级,需要知道该集合中的等级。
我有以下哈希:
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}]
现在我想知道这个条目的位置。
有时我有一组过滤的等级,需要知道该集合中的等级。
用于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
如果您想同时获取索引和对象本身,您可以使用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
locals_arr.index({:rank=>3, :id=>7})
您可以使用索引方法:
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