From: Akinori MUSHA Date: 2000-10-04T02:03:27+09:00 Subject: [ruby-dev:11124] Enumerable#every(n)  こんばんは。  前々から Enumerable#each で要素を 2 個ずつ、あるいは 3 個ずつ 取れたら便利だなーと思っていたので、今日 IRC で話題にしてみました。 (このメーリングリストでも以前話題になりましたね)  そして yashi さんや znz さんからいろいろヒントを頂き、いじって いるうちにこんなものができました。 * * * Enumerable#every(n) 要素を先頭から n 個ずつの配列として順に取り出す Enumerable な オブジェクトを返す。最後の組の要素が n 個に満たない分は、 nil で 埋めて返す。 使用例 1:  アルファベット 4 つごとの組で、最初の要素が母音でないものを表示 $ ruby -e 'p (("A".."Z").every(4).find_all { |i| "AEIOU".index(i[0]) == nil } )' [["M", "N", "O", "P"], ["Q", "R", "S", "T"], ["Y", "Z", nil, nil]] 使用例 2:  カレントディレクトリのファイル一覧を一行 3 カラムで表示 $ ruby -e 'Dir.open(".").every(3).each { |i| printf "%-20s%-20s%-20s\n", *i }' . .. CVS cygwin djgpp ext lib misc missing sample win32 x68 README.EXT.jp .cvsignore COPYING ChangeLog MANIFEST Makefile Makefile.in README README.EXT (snip) string.o struct.o time.o util.o variable.o version.o dmyext.o libruby.a main.o miniruby rbconfig.rb libruby.so.16 libruby.so ruby  実装は以下の URL に置きました。(enum.c への差分) http://people.FreeBSD.org/~knu/misc/rb_enum_every.diff 1.6 に入れるにはちと遅いかもしれませんが、 1.7 で採用してもらえ ないでしょうか。  Array やイテレータ周りはまだいくつかアイデアがあるので、少しずつ 実現させたいです。 -- / /__ __ / ) ) ) ) / Akinori -Aki- MUSHA aka / (_ / ( (__( @ idaemons.org / FreeBSD.org "We're only at home when we're on the run, on the wing, on the fly"