0

我有以下哈希:

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

4 回答 4

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
于 2013-10-30T19:25:14.213 回答
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
于 2013-10-31T19:58:40.527 回答
1
locals_arr.index({:rank=>3, :id=>7})

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

于 2013-10-30T19:24:50.527 回答
0

您可以使用索引方法:

 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
于 2013-10-30T19:25:10.877 回答