ごとけんです

In message "[ruby-list:7729] mail index sort by From:"
    on 98/04/27, Kikutani Makoto <kikutani / debian.or.jp> 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