0

私は次のような配列としていくつかのキーを持つハッシュを持っています:

foo = {[45, 121]=>:some_field}

fooキーに45が含まれている:some_fieldを選択するにはどうすればよいですか?

次に、一致するものが見つかった場合、同じキー内の他の要素を取得するにはどうすればよいですか?

4

3 に答える 3

4

これは可能ですが、全体を線形スキャンする必要があるため、ハッシュを使用する目的が損なわれます。ハッシュをインデックスとして使用できるため、同じ値に対して複数のハッシュキーを使用する方がはるかに優れています。

例:

found = foo.find { |k, v| k.include?(n) }
found and found[1]

キーに多数のエントリがあり、ハッシュに多数のアイテムがある場合、すべてのキーとすべての値を個別にテストする必要があるため、このパフォーマンスはひどいものになることに注意してください。

于 2012-09-06T14:51:53.550 に答える
2
foo = {[45, 121]=>:some_field}
foo.detect{ |k,v| k.include? 45 }
#=> [[45, 121], :some_field]
foo.detect{ |k,v| k.include? 45 }.last
#=> :some_field
于 2012-09-06T14:50:35.760 に答える
1

1つの要素だけではない場合は、ハッシュを逆にすることをお勧めします。

foo = {[45, 121]=>:some_field, [1, 45, 7] => :some_other_field}

bar = {}
foo.each do |k, v|
  k.each do |x|
    if bar.has_key?(x)
      bar[x] << [[k, v]]
    else
      bar[x] = [[k, v]]
    end
  end
end

p bar[45]
于 2012-09-06T14:57:55.740 に答える