質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

2350閲覧

railsのハッシュ{hash}内の値の取得について

Mkato

総合スコア118

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2015/10/22 19:55

ruby 2.1.3
Rails 4.2.3

プログラム初心者になります。

railsのハッシュ{hash}内の値の取得について質問があります。
ハッシュ内の特定の値を全て取得して表示したいと考えているのですがうまくいきません。

<% aiueo = { 0 => "日本", 0 => "アメリカ", 0 => "カナダ", 4 => "ドイツ", 5 => "フランス", 6 => "イギリス"} %>

行いたいことは上記↑のハッシュにて0の値の 日本、 アメリカ、 カナダ を取得したいと考えております。

一つだけであれば。。。

<% aiueo = { 0 => "日本", 0 => "アメリカ", 0 => "カナダ", 4 => "ドイツ", 5 => "フランス", 6 => "イギリス"} %> <%= aiueo[0] %>

結果はカナダとなります。 日本とアメリカが取得出来ていない。

.selectの場合

<% aiueo = { 0 => "日本", 0 => "アメリカ", 0 => "カナダ", 4 => "ドイツ", 5 => "フランス", 6 => "イギリス"} %> <%= aiueo.select [0] %>

結果は
wrong number of arguments (1 for 0)
となります。

どの様に取得すると日本、アメリカ、カナダを取得出来ますでしょうか?

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

キーの重複は出来ません。
<%= aiueo.inspect %>
すると分かると思いますが、aiueoの中に既に残っていませんので、どうしようも無いです。

なぜ、重複したキーを持ちたいと思ったのかの所まで立ち戻って、考え直す必要があります。
例えば、

Ruby

1aiueo = { 0 => ["日本", "アメリカ", "カナダ"], 4 => ["ドイツ"], 5 => ["フランス"], 6 => ["イギリス"]}

のように配列にするとか。

投稿2015/10/22 22:45

otn

総合スコア84507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mkato

2015/10/23 06:17

ご回答有難う御座います。 やはり難しいですかね。。。一度処理を見なおしてみます。 重複したキーを持ちたいと思った理由は if文で処理すると長いし条件がややこしいなーと考えハッシュで出来るんじゃないのかなー?と考えまして何とか出来ないかなと。 事前にキーの国が何処かってのが分かっていれば頂いたコードの様に処理したいのですが、処理毎に変わるので。。。 ```ruby minxxx = [@jp, @us, @ca, @de, @fr, @uk].min #@jp, @us, @ca... ←などは数値とお考え下さいませ。 aiueo = { @jp => "日本", @us => "アメリカ", @ca => "カナダ", @de => "ドイツ", @fr => "フランス", @uk => "イギリス"} aiueo[minxxx] ``` @jp, @us, @ca... 全て違うキー入る前提であれば処理出来ると考えますが、同じキーの場合があるんですよね。。。 何か良い処理の方法御座いませんでしょうか?
otn

2015/10/23 09:35

何のためにそんなことをしたいのか不明なので、アドバイスが難しいです。 回答に書いた物では何がまずいのかもよく分からない。
rifuch

2015/10/23 17:07

キーが一意にならない以上、ハッシュでの表現は無理でしょう。 たとえば、多次元配列を使うとか。 minxx = [[0, "日本"], [0, "アメリカ"], [0, "カナダ"], [4. "ドイツ"], [5. "フランス"], [6, "イギリス"]] aiueo = minxx.all{|v| v[0] == 0}.map{|a| a[1]} => aiueo = [""日本'","アメリカ","カナダ"] 複数の条件が含まれるデータを表現するなら、いっそのことクラスにしてしまう方が良いかもしれません。 ただ、otnさんの言っているように、データの条件その他がわからないので、ベストな方法はわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問