永井@知能.九工大です. >>>>> "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