- ベストアンサー
Rubyでハッシュの中の値からキーを取りだしたい
ハッシュの中の値からキーを取りだしたいのですが、うまくいきません。 下記のようなソースしか思い浮かばないのですが、 何か良い手はないでしょうか。 ------- if number == ban.values d = ban.keys end
- みんなの回答 (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
その他の回答 (4)
- koko_u_u
- ベストアンサー率18% (216/1139)
マニュアルを読むんですね。 http://doc.okkez.net/static/192/class/Hash.html ハッシュのメソッドを上から順に読んでいくと > key(val) -> object > index(val) -> object > 値 val に対応するキーを返します。対応する要素が存在しない時には nil を返します。 とあるじゃないですか。
- nora1962
- ベストアンサー率60% (431/717)
key の値だけほしいなら d = Hash[ ban.to_a.select{ |x| x[1]==number ].keys でヒットするキーの配列が取得できます。
補足
あっ、間違えました。そうです。ハッシュから取りたいんです。 ですが、Internal Server Errorになってしまいます。
- nora1962
- ベストアンサー率60% (431/717)
いったん配列に変換してSELECTメソッドを使って絞り込んで、再度ハッシュに変換するとかでしょうか。 Hash[ ban.to_a.select{ |x| x[1]>1} ] とか
補足
申し訳ないですが、動きません。
- nora1962
- ベストアンサー率60% (431/717)
質問の内容がいまいち分かりかねます。 ハッシュのVALUE部分からKEYの値を逆算したいということでしょうか? もう少し、やりたい事を具体的に提示願えませんか。
補足
その通りです。普通は逆ですよねーー。 ちょっと無理なソースコードなので、なんとかならないでしょうか。
お礼
書き方を変えたら動きました。配列の配列なんですね。 ありがとうございます。
補足
どうしても動きません。 何でs.values[0]って配列なんですか?