In <20010312114430.C2E3.GGB03124 / nifty.ne.jp>
On Mon, 12 Mar 2001 12:39:47 +0900
"たけ(tk)" <ggb03124 / nifty.ne.jp> wrote:
> [ruby-list:28681] Re: field sort にて 
> Koji Arai <JCA02266 / nifty.ne.jp> さん 曰く:
> 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)