ハッシュをキーの値でソート
ハッシュをキーの値でソートしませう.
CSVファイルを読み込んで良い感じに処理できる部分も一緒にメモ.
#csvのサンプル csv = [["ちんちん", "chinchin", 0.5], ["ぺろぺろ", "peropero", 1.0], ["びゅるる", "byururu", 0.1], ["ぱこぱこ", "pakopako", 0.5]] ono = Array.new keys = [:kana,:roman,:sim] #csvの項目に合わせる csv.each_with_index do |row, i| ono[i] = Hash[*keys.zip(row).flatten] end #昇順ソート ono_low2high = ono.sort do |a,b| a[:sim] <=> b[:sim] end #降順ソート ono_high2low = ono.sort do |a,b| b[:sim] <=> a[:sim] end p "オリジナル" ono.each do |row| p row end p "昇順ソート" ono_low2high.each do |row| p row end p "降順ソート" ono_high2low.each do |row |p row end p "良い感じにアクセス" ono.each do |row| p "銀「#{row[:kana]}のアレは#{row[:sim]}…(///」" end
実行結果.
"オリジナル" {:kana=>"ちんちん", :roman=>"chinchin", :sim=>0.5} {:kana=>"ぺろぺろ", :roman=>"peropero", :sim=>1.0} {:kana=>"びゅるる", :roman=>"byururu", :sim=>0.1} {:kana=>"ぱこぱこ", :roman=>"pakopako", :sim=>0.5} "昇順ソート" {:kana=>"びゅるる", :roman=>"byururu", :sim=>0.1} {:kana=>"ちんちん", :roman=>"chinchin", :sim=>0.5} {:kana=>"ぱこぱこ", :roman=>"pakopako", :sim=>0.5} {:kana=>"ぺろぺろ", :roman=>"peropero", :sim=>1.0} "降順ソート" {:kana=>"ぺろぺろ", :roman=>"peropero", :sim=>1.0} {:kana=>"ちんちん", :roman=>"chinchin", :sim=>0.5} {:kana=>"ぱこぱこ", :roman=>"pakopako", :sim=>0.5} {:kana=>"びゅるる", :roman=>"byururu", :sim=>0.1} "良い感じにアクセス" "銀「ちんちんの は0.5…(///」" "銀「ぺろぺろの は1.0…(///」" "銀「びゅるるの は0.1…(///」" "銀「ぱこぱこの は0.5…(///」"
読み込むCSVファイルの項目が多くなってくるとキーでアクセスするのが便利です.*1CSVファイルの項目が増えたらkeysを調整するだけ.簡単.
同じ値の時にキーで昇順とかもできたような.
今はこれで.
オノマトペは楽しいのでみんな研究しましょう!(キリッ
参考にさせていただいたサイト
RubyでCSVを扱うときは配列をハッシュにすると便利な件 - wataradioの日記
mapee.jp
*1:ちょっと前までrow[13]とかやってた….