さくです。

At Sat, 10 Mar 2001 00:43:59 +0900,
Kenji Noda <zaq94465a / cat.zero.ad.jp> wrote:

> data.reverse

あとでsortするなら逆転させても意味ないかも。あるいは最初からpushではなく
ushiftを使うとか。

というか、data.reverse はdataを逆順にした新しいArrayを返すだけで、自分は変
化しません。自分自身を逆順にするには data.reverse! を使います。

> puts data.sort_by { |line| line.split(/#{reg}/s)[field] }
> yieldのぶぶんは理解できませんが、そのまま使用しました。
> どなたかyieldの部分を解説していただけませんでしょうか

yieldは、yieldを使っているメソッドの引数に付けられた { ... } ブロックを評価(実
行)するものです。

上では sort_by { |line| line.split(/#{reg}/s)[field] } という形で呼び出し
ていますから、

>    def sort_by
>      collect { |e| [ yield(e), e ] }.sort.collect{ |e| e[1] }
>    end

は、
      collect { |e| [ e.split(/#{reg}/s)[field], e ] }.sort.collect{ |e| e[1] }
のような意味になります。

sort_byを汎用的(いろいろな比較条件で使い回せる)にするために使いましたが、
実は、今回やることと直接の関係はないのでした _o_

一度かぎりなら、dataを読み込んだあと、

data_with_given_field = data.collect { |line| [ line.split(#{reg}/s)[field], line ] }
sorted = data_with_given_field.sort
result =  sorted.collect { |e| e[1] }
puts result

でいいです。

-- 
OZAWA -Crouton- Sakuro
E-Mail: mailto:crouton / weatherlight.org
   Web: http://www.weatherlight.org/~crouton/
   PGP: C98F 74E0 AEEB 4578 1DFC  F650 3BE0 9627 11FC C9F5
VERBA VOLANT, SCRIPTA MANENT