こんばんは、皆さん。
2次元配列がわかりやすく説明されているおすすめの本はありませんか?
リファレンスも怪しいので、そこから丁寧に解説されていて、
2次元配列を中心に、多次元配列にも触れられている本を探しています。
私の技術レベルを持っている本で表すと以下のとおりです。
・Perlの絵本(一通り理解しました)
・技術評論社のすぐわかるPerl(一通り理解しました)
・ASCII社のPerl/CGIスクリプト入門(CGIの前までは理解しました)
これらの本には2次元配列については触れられておらず、
まだ自分には早いのかとも思いましたが、必要に迫られています。
アマゾンの評価は、具体的にこの項目についてはどうだといった情報が載っていないため、参考にできませんでした。
権威ある分厚い本は、持っている本を完全に理解してからにしようと思っています。
Perlの絵本くらいわかりやすく図解されているとありがたいです。
よろしくお願いします。
No.1
- 回答日時:
Cとかベーシックなら分かるんですが、perlはネットで勉強しました。
なので、中途半端に覚えたのですが、タブンそのぐらいならばネットで調べるだけで分かる範囲だとおもいます。
URL乗せておきます。
具体的な考え方は
1次元配列とは1列の表の中にデータを書きこむ配列です。定規の目盛りのような感じですね。
2次元配列とは沢山の列の表にデータを書きこむ配列です。エクセルのような感じ
3次元配列とは縦、横、高さのある表にデータを書き込む配列です。エクセルのページが沢山ある様な感じです。
そんなに難しく考えなくても出来ると思うのですが。
考え方としては、hairetu[x][y]とは、x、yの座標にデータをしまった 位に覚えておけば良いと思います。
参考URL:http://takeoba.cool.ne.jp/java/arrangement2.htm
No.2
- 回答日時:
多次元配列 = 配列の配列[の配列...] です。
普通の一次元の配列さえしっかり身についていれば後は応用でしかないのですが、Perlで扱う(コーディングする)には記号類(@,[],etc)の扱いにちょっと慣れがいるかもしれませんね。
とりあえず書籍としては『プログラミングPerl(通称らくだ本)』がおすすめですが、#1さんのおっしゃる通りネット上でも事足りるかと思います。
深く掘り下げてはありませんがポイントはしっかり押さえられていると思う参考URLを挙げておきます。
参考URL:http://www.rfs.jp/sb/perl/02/04.html#%E5%A4%9A%E …
お返事ありがとうございます。
教えていただいたURLはごくたまに見ます。
多次元配列が書いてあるのは気づきませんでした。
でもリファレンスを使ってメモリの中身を意識したサンプルだとさらによかったです。
まずはURLに記載されている内容のことを自分のものにします。
No.3
- 回答日時:
No1です。
さっきのURLどうやらJAVAっぽいですね。
代わりのURL貼っておきます。
すいませんでした。
参考URL:http://www001.upp.so-net.ne.jp/hata/dowasure_per …
お返事ありがとうございます。
Perlはやはりちょっとしたものを作るための、お手軽プログラム言語なんでしょうか?
ネットでこと足りてしまう程度のものというのは、Perlを中心に勉強して行こうとしてるので、ちょっと残念です。
私はプログラミングのセンスがないせいか、ネットの文章を読んで身につける能力がほとんどありません。
ですので、申し訳ありませんが今回はポイントを見送らせていただきます。
No.5ベストアンサー
- 回答日時:
# 間違いがあるかもしれませんが、私の理解しているところを書きます
http://perldoc.jp/docs/perl/5.6.1/perllol.pod
http://www.kt.rim.or.jp/~kbk/perl5.005/perllol.h …
標準では2次元配列などというものはPerlに組み込まれてなくて、Perlの配列はそういう言い方をすればスカラーを要素とする1次元配列しかないところを認識するのがポイントだと思います。多次元の配列やハッシュというか多重構造の (ネストした) 配列やハッシュは、リファレンスというスカラーを要素とさせることで実現します。
例えば、2次元配列の例で言えば
┌ ┐
│ a_{00} a_{01} … a_{0n} │
│ a_{10} a_{11} … a_{1n} │
│ a_{20} a_{21} … a_{2n} │
│ . . . . │
│ . . . . │
│ . . . . │
│ a_{m0} a_{m1} … a_{mn} │
└ ┘
を実現するのに
@array_2d = (@row_0, @row_1, @row_2, ..., @row_m) とか、あるいは
# ただし、@row_i = ($a_i0, $a_i1, $a_i2, ..., $a_in) (i = 0, 1, 2, ..., m)
@array_2d = (
($a_00, $a_01, $a_02, ..., $a_0n),
($a_10, $a_11, $a_12, ..., $a_1n),
($a_20, $a_21, $a_22, ..., $a_2n),
...,
($a_m0, $a_m1, $a_m2, ..., $a_mn))
と書いてしまうと、@array_2dは期待した2次元配列とはならず、1次元に平坦化されて
@array_2d = (
$a_00, $a_01, $a_02, ..., $a_0n,
$a_10, $a_11, $a_12, ..., $a_1n,
$a_20, $a_21, $a_22, ..., $a_2n,
...,
$a_m0, $a_m1, $a_m2, ..., $a_mn)
としたことと同じになってしまいます。これでは$a_ijを取り出すのにiとjを単純に並べて$array_2d[i,j]みたいにはできません ($array_2d[n*i+j]かな)。
これを解決するのがリファレンスで、配列を指すリファレンスを要素にして
@array_2d = (\@raw_0, \@raw_1, \@row_2, ..., \@row_m) とか、あるいは
@array_2d = (
[$a_00, $a_01, $a_02, ..., $a_0n],
[$a_10, $a_11, $a_12, ..., $a_1n],
[$a_20, $a_21, $a_22, ..., $a_2n],
...,
[$a_m0, $a_m1, $a_m2, ..., $a_mn])
のようにすると期待したものになります。リファレンスはスカラーの一種なのでそのまま保たれます (角括弧は取り除かれない)。この場合、$a_ijの取り出しは、@array_2dのi要素 (i行要素全体@row_iを指すリファレンス) を使って、配列@{$array_2d[i]}のj要素とすることで実現できます。つまり${$array_2d[i]}[j]で指定できます。これは別の表記ができて、$array_2d[i]->[j]、さらに略記できて、$array_2d[i][j]と表すことができます (このように書くとあたかも他のプログラミング言語にあるような2次元配列に見えます)。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.h …
2次元配列は配列のリファレンスを要素とする配列というわけですが、以上のことを理解していれば「のリファレンス」といった部分を省略して、配列を要素とする配列、さらに略して配列の配列などと言っても十分伝わるわけです (配列が配列の要素になっているように聞こえて、他のプログラミング言語を学んでいる人だと文字通り受け取ってしまいがちですが、面倒なので省略した言い方をしているのだと認識するのが正しいわけです)。
書籍としては『続・初めてのPerl』の最初の数章を読むのがいいかもしれません。『Perlデータマンジング』の付録Bもいいかも。
http://www.oreilly.co.jp/books/4873111676/
この回答への補足
お返事ありがとうございます。
かなりわかってきました。
ただ、参考URLは私には難解なもののように思いました。
例えば、冒頭の文章からすでにわかりません。
「リリース 5以前のPerlではすべてのリファレンスはシンボリックでなければならなかったために」
のリファレンスはシンボリックと言う意味がいきなり不明です。
こんなレベルですが、「続・初めてのPerl」の前に「初めてのPerl」は読まなくて大丈夫でしょうか?
No.6
- 回答日時:
「続・初めてのPerl」は「初めてのPerl」を読み終えているのを前提としています。
また、前半部分はよいのですが、オブジェクト指向に言及する部分以降の訳に難があります。値段も高価な上に、ご希望と違って図はほとんどありません。そんなこともあって今回はお薦めしませんでした。シンボリックリファレンスとは、以下のような使い方です。use strict 下では使用できません。
$name = "test";
$test = "テスト";
print ${$name}; # print $test;と同じ結果になる
# 結果↓
テスト
ありがとうございます。
変数を変数名にするのはシンボリックリファレンスという名称なんですね。
やはり初めてのPerlも読んだほうが良さそうに思いました。
あと、No.5の方ということでよろしいですね?
ポイントの割り当てはNo.5に対してだけでご了承ください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- 数学 一般的な行列の逆行列に関する質問 3 2022/04/21 14:53
- 数学 数学の問題の解き方を教えてください! 3 2022/11/02 17:32
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- 事件・犯罪 刑法についてだれか助けてください。 2 2022/06/05 04:08
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- 事件・犯罪 刑法についてです 2 2022/06/04 03:11
- Ruby 初心者プログラミング 3 2022/10/12 11:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlで<select multiple>の複数...
-
リストボックスに縦スクロール...
-
for文とforeach文について
-
perlで2次元配列をサブルーチ...
-
2次元配列の扱い
-
perl このテキストファイルを簡...
-
VBA 二次元配列 ループの書き方
-
文字の整列(printf)
-
二次元配列における要素数のは...
-
Powershell $変数 = @()の空配...
-
do-while文での無限ループ?
-
perl 配列名変数指定するには
-
一致する要素が格納されている...
-
プログラミングについて。 1つ...
-
文字列を変数名として扱う方法
-
エクセルの当番表を作っていま...
-
チェックデジットについて
-
ネットワークループとルーティ...
-
どなたかこのプログラミングを...
-
VBA for i=1 to lastrow
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのautofilter、criteriaの配...
-
二次元配列のインデックスについて
-
リストボックスに縦スクロール...
-
Excel VBA ユーザーフォームの...
-
マクロ Publicでの配列定義
-
エクセルVBAでTransposeの不思議
-
二次元配列における要素数のは...
-
Strawberry Perl for Windows ...
-
perlで2次元配列をサブルーチ...
-
クラスに配列を渡す方法
-
Dim flag(4) as boolean で配列...
-
文字の整列(printf)
-
perlで配列の要素が空なのを知...
-
jcode->jfold で禁則処理
-
VB6で配列の最大値を簡単に求め...
-
perl 配列の要素数について
-
ファイル名に日付・時刻を付与...
-
チェックボックスのperlでの値...
-
組み合わせについての質問です...
-
配列を初期化する時ってどうす...
おすすめ情報