永井@知能.九工大です.

>>>>> "N" == NAGAI Hidetoshi <nagai / dumbo.ai.kyutech.ac.jp> writes:
>>>>> "G" == GOTO Kentaro <gotoken / math.sci.hokudai.ac.jp> writes:
G> 短くてカッコ良い! と思いましたが、opt を毎回検査すると
G> 引数の個数に比例(?)して遅くなっちゃうようです。
N> なるほど.そりゃそうですよね.
N> では先に検査を済ませておくとして,これではどうでしょう?

惚けてました.(^_^;
比較のループを途中で打ち切りたいんですよね.
こんな感じでしょうか.
# find 終了時点の opt が保持されることがポイントですね.(^_^)

def sort(*args)
	params = args.collect{|arg|
		next unless arg =~ /^(\w+)(:\w+)?$/
		[(($1 == 'Date')? 'time': $1), (($2 == ':r')? -1: 1)]
	}
	params << ['time', 0] unless params.assoc('time')

	ret = 0
	opt = 0
	MailFolder @inbox.sort{|x,y|
		params.find{|key,opt|
			next unless x[key] and y[key]
			(ret = x[key] <=> y[key]).nonzero?
		}
	}
	ret * opt
end

-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai / ai.kyutech.ac.jp