dポイントプレゼントキャンペーン実施中!

ハッシュの中の値からキーを取りだしたいのですが、うまくいきません。
下記のようなソースしか思い浮かばないのですが、
何か良い手はないでしょうか。

-------
if number == ban.values
d = ban.keys
end

A 回答 (5件)

お使いになっているRubyのバージョンは何でしょうか。


オーム社のプログラミングRuby 1.9 ライブラリ編にも例が載っています。
h = { "a" => 100, "b" => 200, "c" => 300 }
s = h.select { | k, v | v == 200 } # {"b"=>200}
p s.values[0] # 200

になるはずなんですが。
http://ref.xaio.jp/ruby/classes/hash/select

この回答への補足

どうしても動きません。
何でs.values[0]って配列なんですか?

補足日時:2011/02/17 09:55
    • good
    • 0
この回答へのお礼

書き方を変えたら動きました。配列の配列なんですね。
ありがとうございます。

お礼日時:2011/02/17 10:41

マニュアルを読むんですね。



http://doc.okkez.net/static/192/class/Hash.html

ハッシュのメソッドを上から順に読んでいくと


> key(val) -> object
> index(val) -> object
> 値 val に対応するキーを返します。対応する要素が存在しない時には nil を返します。

とあるじゃないですか。
    • good
    • 0

key の値だけほしいなら


d = Hash[ ban.to_a.select{ |x| x[1]==number ].keys
でヒットするキーの配列が取得できます。

この回答への補足

あっ、間違えました。そうです。ハッシュから取りたいんです。
ですが、Internal Server Errorになってしまいます。

補足日時:2011/02/16 16:42
    • good
    • 0

いったん配列に変換してSELECTメソッドを使って絞り込んで、再度ハッシュに変換するとかでしょうか。


Hash[ ban.to_a.select{ |x| x[1]>1} ]
とか

この回答への補足

申し訳ないですが、動きません。

補足日時:2011/02/16 16:40
    • good
    • 0

質問の内容がいまいち分かりかねます。


ハッシュのVALUE部分からKEYの値を逆算したいということでしょうか?
もう少し、やりたい事を具体的に提示願えませんか。

この回答への補足

その通りです。普通は逆ですよねーー。
ちょっと無理なソースコードなので、なんとかならないでしょうか。

補足日時:2011/02/16 11:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!