ごとけんです
In message "[ruby-list:7800] Re: mail index sort by From:"
on 98/04/30, NAGAI Hidetoshi <nagai / dumbo.ai.kyutech.ac.jp> writes:
>永井@知能.九工大です.
>ruby-1.1b9_16 なら配列間の <=> が可能であるはずですから,
>きちんとテストはしていませんが,こんな感じではいかがでしょう?
>
>def sort(*args)
> args << 'Date' if args.size == 0 or not args.include?('Date')
>
> MailFolder @inbox.sort{|x,y|
> cmp_pair = [Array.new, Array.new]
> args.each{|arg|
> next unless arg =~ /^(\w+)(:\w+)?$/
> key = ($1 == 'Date')? 'time': $1
> opt = ($2 == ':r')? 1: 0
> next unless x[key] and y[key]
> cmp_pair[opt] << x[key]
> cmp_pair[(opt+1)%2] << y[key]
> }
> cmp_pair[0] <=> cmp_pair[1]
> }
>end
短くてカッコ良い! と思いましたが、opt を毎回検査すると
引数の個数に比例(?)して遅くなっちゃうようです。
でも Array#<=> の使い方は知らなかったので参考になりました。
# ruby-dev にはなかなか目が通せません *_ _*
もう少し時間コストとの兼ね合いを見て練ってみます。
どうもありがとうございました。
-- gotoken
# 私信:
# どうもごぶさたしてます、dumbo 界隈はお変わりありませんか?