ごとけんです

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 界隈はお変わりありませんか?