From: Tadayoshi Funaba Date: 1998-04-22T18:59:17+09:00 Subject: [ruby-list:7714] Re: iteration with index (Re: How to write Perl's `@a[@b] = @c' in ruby) ふなばです。 >これってなんだか面白そうなんですが,具体的にはどういう動作す >るんですか? 実はあんまり面白ろくないんですが、lisp の pairlis とか、haskellなんか の zip みたいな感じでしょうか。わたなべさんが説明してくれたとおりなん ですが。 とくにイテレータと関係があるわけでもないし、これでみんな解決できるわけ でもなさそうですが、このようにすれば対象はひとつにできてスッキリするし、 each 以外のイテレータにもつかえるわけで、with_index 系の充実をいくらか でも抑止 (?) するヒントにでもなればいいんですが。 Enumerable として対応するのはちょっと面倒かもしれない。 とりあえず、Array としておためし: class Array def zip(*others) co = [self] + others xs = [] for x in 0..(co.collect {|y| y.length}.max - 1) ys = [] co.each do |y| ys << y[x] end xs << ys end xs end end このあいだ、わたなべさんがやっていた collects みたいなもの: p [1,2,3].zip([4,5,6],[7,8,9]).collect {|x| sum = 0; x.each {|y| sum += y}; sum } #=> [12, 15, 18] --Tadayoshi Funaba