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

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

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

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

Q&A

解決済

2回答

1618閲覧

ruby 名前ランキング

jon521

総合スコア12

Ruby

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

0グッド

0クリップ

投稿2017/12/22 08:31

rubyを勉強中です。プログラムについて質問なのですが、
「苗字 名前 性別 都道府県」の情報がランダムで複数記入されているテキストファイルを読み込んで、
北海道の名字の出現数トップ男女別3位までを求め、順位、名前を出力するプログラムを作成しようとしているのですが、それぞれの名前 性別 都道府県だけを出力することができたのですが、そこからどのようにして都道府県を北海道だけに特定するのか、男女別で名前を上位3位特定するのかわかりません。
よろしくお願いします。

現在できているプログラム
while line = gets
line.chomp!
puts line.split[1],line.split[2],line.split[3]
end

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

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

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

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

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

guest

回答2

0

かなり適当

rb

1NamaeDatabase = Struct.new :myouji, :name, :sex, :address 2data = [] 3while line = gets 4 tmp = line.chomp!.split 5 data << NamaeDatabase.new(*tmp) 6end 7sexbase = data.group_by(&:sex) 8sexbase.each{|sex, v| 9 print "#{sex}ランキング\n" 10 # 住所で特定 11 # 北海道のみじゃない場合はgroup_byでまとめてからの方が扱いやすいかも 12 myouji = v.find_all{|x| x.address == "北海道"}.group_by(&:myouji).to_a 13 myouji.sort_by!{|x| x[1].size} 14 print "1位:#{myouji[-1][0]} #{myouji[-1][1].size}人\n" 15 print "2位:#{myouji[-2][0]} #{myouji[-2][1].size}人\n" 16 print "3位:#{myouji[-3][0]} #{myouji[-3][1].size}人\n" 17}

投稿2017/12/22 12:57

編集2017/12/22 12:58
asm

総合スコア15147

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

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

jon521

2018/01/10 08:55

ご丁寧にプログラム作成してくださりありがとうございました。
guest

0

ベストアンサー

どのようにして都道府県を北海道だけに特定するのか

表計算的な処理には、色々やり方がありますが、
一番シンプルなのは、やはりIF文による分岐です。
分割してデータが取れているなら、それを使って分岐させます。

ruby

1puts mess if flag == '北海道'

読み込むデータの構造が分からないので、
部分的なサンプルになりますが、上記のような処理です。

「flag」には都道府県のデータ、
「mess」には表示するデータが入っている前提です。


男女別で名前を上位3位特定するのか

こちらは集計が必要なので、やや複雑な処理になりますが、基本は同じ。

やはりシンプルなのは、名前のデータを配列変数などに記録しておき、
以前に出現したものと同じ名前かどうか、配列のループとIF文で判定して、
新しいならデータを追加し、既出ならカウントを増やします。

投稿2017/12/22 09:33

編集2017/12/22 09:34
LLman

総合スコア5592

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

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

jon521

2018/01/10 08:55

時間がかかってしまいましたが、解決することができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問