如何在散列数组中找到条目的位置

时间:2013-10-30 19:21:31

标签: ruby

我有以下哈希:

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}]

现在我想知道这个条目的位置。

有时我会有一组经过筛选的排名,需要知道该组中的排名。

4 个答案:

答案 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})

http://ruby-doc.org/core-2.0.0/Array.html

答案 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