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
locals_arr.index({:rank=>3, :id=>7})

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

于 2013-10-30T19:24:50.527 に答える
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 に答える
0

indexメソッドを使用できます。

 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 に答える