配列@listの要素として@pickupの配列をセットしたいと思っています。
ループ文の中で繰り返し、$countというループの回数をカウントしている変数によってセットする場所を変えていきたいのです。
for($count=0;$count>100;$count++){
(中略しますが、ファイルを読み込み正規表現で値を吸い出しています)
@pickup=("$1","$2","$3");#@pickupはループごとに中身が変わります。
@list[$count] = @pickup;#ここで@listの要素として@pickupをセット
}
上記のように記述したとします。
print $list[80];とすると、@pickupの[0]の要素しか表示しません。
print @list[80];としても上に同じ。
質問1.どうやったら@list[$count]で配列の要素に配列を入れられますか?
質問2.その後どうやって配列の中の配列の要素を取り出せますか?
イメージとしては@listの50番目の要素@pickupの0番目もしくは1番目の要素を取り出したいという感じです。
No.1ベストアンサー
- 回答日時:
Perlのバージョンそのものも不明(もしかしてPerl4?)ですけども,
前の質問から疑問だったんですが
例えば,配列 @file のインデックス 10 の要素は $file[10] です.
@file[10] で配列 @file のインデックス 10 の要素を
示すのは Perl6 の表記法です.
ごっちゃごちゃになってませんか?
さて,本題.
配列の要素はスカラーのみです.
したがって,配列の中に配列をそのままいれることはできません.
前の質問もそうだったのですが
Perlの「コンテキスト」という概念を理解してください.
>@list[$count] = @pickup;#ここで@listの要素として@pickupをセット
(中略)
>print $list[80];とすると、@pickupの[0]の要素しか表示しません。
これは $list[$count] (@list[$count]だとエラーになるはず)に
@pickup を「スカラーコンテキスト」で評価した値が
代入されるので,$pickup[0] が入るはずはないのです.
$#pickup つまり,@pickup の要素数が入るはずです.
配列に配列をいれるとなると
以下のような感じでしょうか.
Perl5.8を前提にしています.
use strict;
use warnings;
my $sample="123 ABC XYZ";#サンプルの文字列
my @list;
for my $count (0..1000){
$list[$count] = [ $sample=~m<(\d+) (\w+) (\w+)> ];
}
print "$list[50]->[0]\n";
print "$list[50]->[1]\n";
マッチ演算をリストコンテキストにおくと
()でキャプチャされたもののリストを返し,
それを匿名配列の生成子[]にいれて
それをスカラーコンテキストである
@lits の各要素への代入に使うことで,
匿名配列へのリファレンスを@listの各要素にいれます.
したがって,@listの各要素はそれぞれ
配列へのリファレンスとなり,
その要素へは -> でアクセスします.
明示的にデリファレンスして
${ $list[50] }[0] としてもよいのですが
やっぱりみにくいですね.
たびたびご回答いただきましてありがとうございます。
Perlのバージョンは5.6.1でした。
コンテキストはなかなか難しいですね。
少しはわかっているつもりでしたが、いざ作ってみて躓いて指摘されてみて初めて全然わかっていないことに気がつきました。
ご教授いただいた方法で配列へ代入することができました。
ありがとうございました。
コンテキストについて詳しく書かれているHPがなかなかないので苦労しそうですが勉強してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのautofilter、criteriaの配...
-
Perl言語での画像ファイルの作...
-
VBScript 配列
-
参照配列の要素数の求め方は?
-
MATLABの関数で配列の要素を返...
-
perlで配列の要素が空なのを知...
-
VBA 多次元配列を用いてグルー...
-
クラスに配列を渡す方法
-
エクセルVBAでTransposeの不思議
-
二次元配列のインデックスについて
-
全組み合わせの出力プログラム
-
perlで2次元配列をサブルーチ...
-
複数の配列の全ての組み合わせ...
-
組み合わせについての質問です...
-
文字の整列(printf)
-
vb.netです。2次元配列の要素を...
-
まったく同じファイルのハッシ...
-
VBA for i=1 to lastrow
-
DOSコマンドのループ内のTIMEコ...
-
多次元配列から重複を削除
マンスリーランキングこのカテゴリの人気マンスリー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での値...
-
組み合わせについての質問です...
-
配列を初期化する時ってどうす...
おすすめ情報