From: Akinori MUSHA aka knu Date: 2000-01-05T19:07:36+09:00 Subject: [ruby-dev:8832] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num)  knuです。先達として Perl だけ見ていてもあれですので、別の刺激をば。  Java の Collection API の List インターフェースには、 List#remove(n) n 番目の要素を削除し、その要素を返す。 List#remove(obj) obj に一致する要素を先頭から探し、見つかったらその要素を 削除して true を返す。なかった場合に false を返す。 List#removeRange(n, m) n 番目の要素から m 番目の要素までを削除。何も返さない。 List#subList(n, m) リストの n 番目の要素から m 番目の要素の範囲のビューを返す。 このビューはリストとして扱え、変更を加えれば元のリストの 該当部分に反映され、元のリストの該当部分を変更するとこの ビューにも反映される。 のようなメソッドが用意されています。remove および removeRange に ついては合理的で特に何も言うことはありませんが、 subList の挙動は たいへん興味深いものです。具体例を挙げると、 Perl の splice(list, offset, len, anotherlist); は、 Java では次のように実現されます。 sublist = list.subList(offset, offset + len - 1); sublist.clear(); sublist.addAll(anotherlist);  このマジックは、実際には SubList という List インターフェースを インプリメントしたクラスによって実現されていますが、ここでは詳細は 割愛します。(もちろん、 Ruby でも実装することは可能です)  同じことができればそれこそ自由自在ですが、ちょっと大げさかな?  以上、脱線失礼しました。 -- / /__ __ / ) ) ) ) / http://www.idaemons.org/knu/ Akinori MUSHA aka / (_ / ( (__( mailto:knu@idaemons.org "We are but hungry.. Associated Ita-meshi Daemons!" http://www.idaemons.org/