From: gotoken@... (GOTO Kentaro) Date: 1998-04-27T06:23:21+09:00 Subject: [ruby-list:7730] mail index sort by From: ごとけんです In message "[ruby-list:7729] mail index sort by From:" on 98/04/27, Kikutani Makoto writes: >きくたにです。 > >メールをいろいろな方法でソートするとします。 >例として From: でソートします。 > >require "mailread" >num = 0 >$mails = [] >$froms = [] >f = open($spool, "r") >while !f.eof? > mail = Mail.new(f) > $mails[num] = mail > $froms[num] = mail.header['From'] > num += 1 >end >f.close > >てなかんじで読みこんどいて、$froms.sort とかやれば、ソート自体は >できるのですが、欲しい情報はそのFrom:に対応する元の mail のほうです。 >つまり、ソートされたFromに対応するインデックスの配列が欲しいと。 >どうやって対応を取ればいいでしょうか? $froms.sort ではなく、こんな感じでどうでしょう? sorted_mails = $mails.sort{|i,j| i['From'] <=> j['From'] } あと $mails ってのを MailFolder とかいうクラスにして sort_by_field('ヘッダ名') みたいなメソッドを 持たせとくと便利かも。 クラスにしなかったらこんな感じだと思います: def mails_sort(h = 'From') $mails.sort{|i,j| i[h] <=> j[h] } end mails_sort('Subject') もっとも、Subject の中に構造を持たせてるような場合は 汎用のものは難しそうですね。 -- gotoken