perlの二次元配列の作り方がさっぱり - 誰か助けて orz
配列を配列に push していきたいのです。 擬似コード的には以下の通り
@parent; @tmp = (1, 2, 3); push(@parent, @tmp); @tmp = (4, 5, 6); push(@parent, @tmp); // parent は 以下の構造になって欲しい // // 1 2 3 // 4 5 6
しかしこれでは、全ての要素が1次元でつながってしまうわ、以下のように力業やってもどうも動かないわ…
@parent[$#parent] = (); for($i = 0; $i < 3; ++$i) { $parent[$#parent][$i] = $tmp[$i]; } // @record = @parent[0]; foreach $t (@record) { print $t, "\n"; # 配列のアドレスらしきモノが出力される。ARRAY(0x3ea324) とか。 }
perl が本当によく分からない… orz
どなたか解決方法ご存じでしたら、ご教示お願い致します…ううう orz
追記 - やりたいこと - 記事自体はその日に書いていたのに、公開が偉い後々に…^^;
やりたいことはぶっちゃけ
CSV ファイルの読み込み
なんっすね。
@record_list; # ↓CSVファイルの1行が入ってるとする $record; @split_data = split(/,/, $record); # これでは record_list に split_data の要素が追記されて # 1次元で管理されてしまうのでアウト # ※↓の java のコード参照 push(@record_list, @split_data);
// コレを期待した list<Object> record_list = 略; String[] split_data = record.slipt(","); record_list.add(split_data); // 現実はコレだった orz list<Object> record_list = 略; String[] split_data = record.slipt(","); foreach(String str : split_data) record_list.add(str);
色々試行錯誤下結果
# これだと1次元的に record_list に入ってしまうが push(@record_list, @split_data); # 参照を代入すれば、とりあえず何とかなる push(@record_list, \@split_data); # で、取り出し方で大失敗していたようで、結局こうなった foreach $record (@record_list) { foreach $t (@$record) { print $t, "\n"; } } # @$ は初めて知ったよ… orz
色々ご迷惑おかけしました…^^;
>各方面
rayfill さんの記事を読んで
http://d.hatena.ne.jp/rayfill/20080826#1219724506 こちらより
push (result, [@columns]);
これは正直感動した。すごい。 ただ知らないと絶対に読め無い気もする…
さすが書いた人しか分からない言語と言われているだけあるぜ!(ぉ