2011年5月 1日

[ruby-list:48035] Re: CSVファイルのデータをソートしたい

とりあえず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 <tenzancode@xxxxx>:

> お世話になっています。
>
> CSVファイルのデータをソートしたいのですが、中身をデータを配列としてみたら2次元の配列になります。
>
> データは2つの列(例えば優先1ーA列、優先2ーC列)でソートするにはプログラム上、CSVのデータをまず配列に変換する必要はあるのでしょうか。それとも配列せずに実現できる物でしょうか。
>
> 宜しくお願いします、
> アスカル


--
Aiga Matsuo

投稿者 xml-rpc : 2011年5月 1日 22:34
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/103550
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。