From: Inaba Hiroto Date: 1999-04-13T23:59:21+09:00 Subject: [ruby-list:13694] Re: Dir.foreach 稲葉です。 for i in Dir.glob("*").grep(/^\d+$/).filter{|s|s.to_i}.sort.filter{|n|n.to_s} ... は t1 = Dir.glob("*") t2 = t1.grep(/^\d+$/) t3 = t2.filter{|s|s.to_i} t4 = t3.sort t5 = t4.filter{|n|n.to_s} for i in t5 ... を短く(かつわかりづらく)書いたものです。 WATANABE Hirofumi wrote: > > わたなべです. > > Inaba Hiroto writes: > > : for i in > : Dir.glob("*").grep(/^\d+$/).filter{|s|s.to_i}.sort.filter{|n|n.to_s} > : ... > : end > : > :とかでないといけないですね. この変数iを使わない修正は実は不要でした。(loopに入る前にしか評価するは ずない...) > : それから「Dir.glob("*").grep(/^\d+$/)」ま > :でで得られるArrayの要素に"00"とか"010"とかがないという仮定も必要です. > > その仮定をなくすには もともとの柳川さんの使い道はMHのinboxのメール ファイルの処理ということで上の仮定が成立すると思ったのでした。 > for i in > Dir.glob("*").grep(/^\d+$/).filter{|s| [s.to_i, s]}.sort.filter{|n| n[1]} > ... > end > という感じになりますね. はい、一般にはこうなります。 > 結局 Schwartzian Transform なんだけど, Array の Array が簡単 > に sort できるから Perl よりすっきりしますね. 確かに。 -- 稲葉 浩人