2009年2月8日日曜日

今日一日躓いたのさ

Arrayの扱い方で今日は躓いてました。

具体的には、

Aarray = Array.new(データ達)
Barray = Array.new(データ達)
Carray = Array.new(データ達)
Darray = Array.new(データ達)

ressult = Array.new(Aarray, Barray, Carray, Darray)

とすると、

ressult =>[[Arrayのデータ達],[Barrayのデータ達],,,,]となる。

これを
ressult.each do |a,b,c,d,|
?? puts "#{a}, #{b} #{c} #{d}"
end
としても面白い事は何も起こってくれない。
起こるのは
aにデータがどんどん入るだけ

なんでか?
ressult[0] = Aarrayのデータ達
ressult[1] = Barrayのデータ達

ressult[2] = Carrayのデータ達

ressult[3] = Darrayのデータ達

となる。

ressultは多次元配列?だから、a[0][0], [0][1]と評価が進んで行く。(eachでね。)
データは一つしか無いわけだから、他のb,c,dにはデータは行かない

データが行かない理由はこれなんだが、何となく出来そうな気がする でも、出来るとこれはこれでまずいんだ。っていうのが分かる。

現在のressultの形は上のやつだが、仮に
ressult=>[[Aarray[0],Barray[0],Carray[0],Darray[0],[Aarray[1],,,,]]だったとしよう。
これで上記と同じ動作をみせると、
結果は上に述べた通りの結果になる。 たとえ、配列の中に一組のデータの組み合わせを作ったとしても思った通りに動作をしてくれない。

でも、今回の処理上どうしても、ressultは最初の形になってしまう(単純に入れるだけだと)
じゃあ、どうするか?
Array#zipの出番です。

こういう風に使う ressult = Aarray.zip(Barray,Carray,Darray)
これを使うと
先ほど言ったような一組の組み合わせ
ressult=>[[Aarray[0],Barray[0],Carray[0],Darray[0],[Aarray[1],,,,]]になってくれる。

うーん、起きてしばらくして気付いたんだけど、やっぱり寝てないと駄目ですね。眠りたい時には寝てコード書いて勉強してが一番という事です。


Hpricot使ってデータを持ってきてデータベースにぶち込んで、次のページへのqueryを抽出しての繰り返しになる予定なのですが、現在まだ難関が残っています。 
解決したらそれは書くとします。

では、また