From: Aiga Matsuo Date: 2011-05-01T22:34:24+09:00 Subject: [ruby-list:48035] Re: CSVファイルのデータをソートしたい --bcaec53f95d1fdc48604a236f6b3 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit とりあえずCSVを読み込んで配列にするのはこのあたりで。 http://doc.ruby-lang.org/ja/1.9.2/class/CSV.html 配列のソートはArrayに便利なメソッドが詰まっているのでこのあたりで。 http://doc.ruby-lang.org/ja/1.9.2/class/Array.html A列っていうとExcelっぽいですが、配列の1要素目でソートするなら。 irb(main):001:0> [[3,2,1], [1,2,3], [2,3,1]].sort => [[1, 2, 3], [2, 3, 1], [3, 2, 1]] とやっても、 irb(main):002:0> [[3,2,1], [1,2,3], [2,3,1]].sort {|a, b| a <=> b} => [[1, 2, 3], [2, 3, 1], [3, 2, 1]] 明示的に比較方法をブロックで与えてあげてもそれなりに動作すると思います。 ※せっかく勉強するならirbも駆使したほうが、色々と実験できて便利かと。 例に挙がっているA列、C列でのソートを一行で書くとこんな感じですかね。 irb(main):008:0> [[1,1,2], [1,2,2], [2,2,2], [2,2,1], [2,1,1], [1,1,1]].sort {|a, b| (a[0] <=> b[0]) == 0 ? a[2] <=> b[2] : a[0] <=> b[0] } => [[1, 1, 1], [1, 2, 2], [1, 1, 2], [2, 2, 1], [2, 1, 1], [2, 2, 2]] なんか、汚いですが。 2011年5月1日19:16 askar : > お世話になっています。 > > CSVファイルのデータをソートしたいのですが、中身をデータを配列としてみたら2次元の配列になります。 > > データは2つの列(例えば優先1ーA列、優先2ーC列)でソートするにはプログラム上、CSVのデータをまず配列に変換する必要はあるのでしょうか。それとも配列せずに実現できる物でしょうか。 > > 宜しくお願いします、 > アスカル -- Aiga Matsuo --bcaec53f95d1fdc48604a236f6b3--