From: gotoken@... (GOTO Kentaro) Date: 2000-11-21T12:10:33+09:00 Subject: [ruby-list:26124] Re: sort. ごとけんです In message "[ruby-list:26122] sort." on 00/11/21, Katsuya Tanaka writes: >オープンしているファイルは >11 2 --- ............. <- 日付の後ろは任意データ。 > >----- >〜 >IGNORE = %w(. ..); > >list = Hash.new(0); > >Dir.foreach(Basedir) do |file| > next if IGNORE.include? file; > > lfile = open("#{Basedir}/#{file}", "r"); > list[file] = lfile.read; > lfile.close; >end > >list.sort{|f1, f2| f1[1].to_i <=> f2[1].to_i }.each do |key, line| > print line; >end >〜 >----- > >sort がうまく行きません。(日付でソートして欲しい) 次のようにすれば良いでしょう。 list.sort{|f1, f2| m1, d1 = f1.split m2, d2 = f1.split [m1.to_i, d1.to_i] <=> [m2.to_i, d2.to_i] } ただし、これだと何度もto_iが行われて効率が悪いので次のように したほうが良さそうです。 IGNORE = %w(. ..); work = Dir.open(Basedir).collect{|fn| next if IGNORE.include? fn data = open(fn).read || "" token, = data.scan(/\A(\d+)\s+(\d+)\s+(.*)/m) if token m, d, text = token else raise "Invalid data `#{fn}'" end [m.to_i, d.to_i, text, # fn, data ] } # list = {} # work.each{|_,_,_, fn, data| list[fn] = data } work.sort! work.each{|i| print i[-1]} なおコメント行は list が必要ならを活かして下さい。 -- gotoken