なかだです。

At Tue, 21 Nov 2000 11:13:01 +0900
Katsuya Tanaka <tanaka / esd.spr.epson.co.jp> wrote:
> オープンしているファイルは
> 11 2 --- ............. <- 日付の後ろは任意データ。
(snip)
> list.sort{|f1, f2|  f1[1].to_i <=> f2[1].to_i }.each do |key, line|
>     print line;
> end
> 
> -----
> 
> sort がうまく行きません。(日付でソートして欲しい)
> 
> list.sort{|f1, f2|  f1[1].to_i <=> f2[1].to_i }.each do |key, line|
> 
> だと、最初(月)しか見ていない様で日でのソートがされない。

> list.sort{|f1, f2|
> f11, f12 = f1.split(" ", 3);
> f21, f22 = f2.split(" ", 3);

  なぜ上は f1[1] としてるのに、こっちは f1 のままなんでしょう。ここでは 
f1, f2 はファイル名と中身の配列になってるのでエラーになるはずです。

>         Time.mktime(Time.now.year, f11.to_i, f12.to_i, 10, 0, 0) <=>
>         Time.mktime(Time.now.year, f21.to_i, f22_d.to_i, 10, 0, 0)
>  }.each do |key, line|
> と Time.mktime を使ってもダメです。

  それを除けばあってますが、ブロックの中は何度も評価されるのでなるべく軽
くしたほうがいいです。できればブロックを使わないほうが。

  たとえばこんなの。

list.collect do |file, line|
  line.split(/\s+/, 2).collect {|s| s.to_i} << file << line
end.sort.collect do |year, month, file, line|
  print line
end

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦