From: Kazuhiro NISHIYAMA Date: 2001-03-13T01:07:47+09:00 Subject: [ruby-list:28701] Re: Dir#stats In <20010312114430.C2E3.GGB03124@nifty.ne.jp> On Mon, 12 Mar 2001 12:39:47 +0900 "たけ(tk)" wrote: > [ruby-list:28681] Re: field sort にて > Koji Arai さん 曰く: > 》 cache = {} > 》 def cache.mtime(x) > 》 self[x] ||= File.mtime(x) > 》 end > 》 Dir.glob("*").sort{|a,b| cache.mtime(b) <=> cache.mtime(a)} > 》 cache_mtime = nil cache_mtime = nilって? >  ちょっとメモリを余分に使いますが、一般化して次のようなのはどうでしょう > か?。 > > ## > ## mask を受け取って、{name=>stat} のハッシュを返す > ## > def Dir::stats(mask) > hash = {} > Dir::glob(mask).each{|f| hash[f] = File::stat(f) } > hash > end > > puts Dir::stats(dir).sort{|a,b| b[1].mtime <=> a[1].mtime }.collect{|s|s[0]} > > * File::Stat#<=> は mtime#<=> と同値なので次でもよい。 > > # puts Dir::stats(dir).sort{|a,b| b[1] <=> a[1] }.collect{|s|s[0]} File::Stat#<=> は mtime#<=> と同値なのを利用してこうすれば sortだけで出来そうです。(mtimeが同じ場合は名前順。) def Dir::stats(mask) Dir::glob(mask).collect{|f| [File::stat(f), f] } end puts Dir::stats(dir).sort.collect{|s|s[1]} -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA)