From: "Nobuyoshi.Nakada" Date: 2000-11-21T11:53:41+09:00 Subject: [ruby-list:26123] Re: sort. なかだです。 At Tue, 21 Nov 2000 11:13:01 +0900 Katsuya Tanaka 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はできる。 中田 伸悦