0
0

More than 3 years have passed since last update.

sort_byを使用してみて

Last updated at Posted at 2019-11-12

あるタブ区切りの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

欲しい結果が得られました。
文字列、整数値は今後も気をつけていきたいと感じました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0