あるタブ区切りのtxtが存在した時に最後のカラムである年齢順に並べたい時にsort_byメソッドを使いました。
その中で詰まってしまった部分も紹介します。
meibo.txt
john m 18
paul m 20
alice f 15
dabid m 17
jasmin f 17
sort_by.rb
personal_data = []
File.foreach("meibo.txt"){|line|
personal_data << line.split(" ")
}
personal_data.sort_by!{|person|
person[2]
}
personal_data.each {|output|
puts output.join("\t")
}
このように出した場合はうまくいくが、配列のpaulの年齢を2にした場合
alice f 15
dabid m 17
jasmin f 17
john m 18
paul m 2
という結果になりました。
これは配列の値をsort_byの時点では文字列でしか捉えていないので整数値としなければならないので
sort_by.rb
personal_data = []
File.foreach("meibo.txt"){|line|
personal_data << line.split(" ")
}
personal_data.sort_by!{|person|
person[2].to_i
}
personal_data.each {|output|
puts output.join("\t")
}
として整数値にしてから年齢順にするためにsort_byを使用した結果
paul m 2
alice f 15
dabid m 17
jasmin f 17
john m 18
欲しい結果が得られました。
文字列、整数値は今後も気をつけていきたいと感じました。