2次元風配列$yaoya_array[$i][$j]から、ハッシュのハッシュ%yaoyaを作成しようとしています。
$yaoya_array[$i][$j]の[$j]の部分は、添え字によって、以下のようなデータを表します。また、NULLの場合もあるとします。
#--- $yaoya_array の中身
$yaoya_array[$i][0] 品物の名前
$yaoya_array[$i][1] 品物の個数
$yaoya_array[$i][2] 品物の値段
上記のデータがダブりもありで、下のように複数個存在します。
#--- $yaoya_array の中身
$yaoya_array[0][0] = 'みかん';
$yaoya_array[0][1] = 3;
$yaoya_array[0][2] = '';
$yaoya_array[1][0] = 'みかん'
$yaoya_array[1][1] = '';
$yaoya_array[1][2] = 300;
上記のデータから、下記のようなハッシュのハッシュ%yaoyaを作成しようとしています。要するに、ばらばらに存在する品物のデータをまとめようとしています。
%yaoya = ('みかん' => {'個数' => 3, '値段' =>300});
そこで、下記のようにしてみたのですが、forループが終わった時には、'kosuu'に何も入っていません。具体的には、1回目のループで'kosuu'=>3、'nedan'=>""になり、2回目のループで'kosuu'=>""、'nedan'=>300となってしまい、'kosuu'=>3が保存されていないみたいです。ifでNULLの場合は値を代入しないようにしているつもりなのですが…。
ループ終了時に'kosuu'=>3、'nedan'=>300となるようにするには、どうすればよいのでしょうか?
#-- %yaoya の作成
for my $i( 0 .. $#yaoya_array ){
if( $yaoya_array[$i][1] ne "" ){
%yaoya = ( $yaoya_array[0] => {'kosuu' => $yaoya_array[$i][1]} );
}
if( $yaoya_array[$i][2] ne "" ){
%yaoya = ( $yaoya_array[0] => {'nedan' => $yaoya_array[$i][2]} );
}
}
No.1ベストアンサー
- 回答日時:
動作確認済み
use Data::Dumper;
#--- $yaoya_array の中身
$yaoya_array[0][0] = 'みかん';
$yaoya_array[0][1] = 3;
$yaoya_array[0][2] = '';
$yaoya_array[1][0] = 'みかん';
$yaoya_array[1][1] = '';
$yaoya_array[1][2] = 300;
#-- %yaoya の作成
for my $i( 0 .. $#yaoya_array ){
if( $yaoya_array[$i][1] ne "" ){
$yaoya{$yaoya_array[$i][0]}->{'kosuu'} = $yaoya_array[$i][1];
}
if( $yaoya_array[$i][2] ne "" ){
$yaoya{$yaoya_array[$i][0]}->{'nedan'} = $yaoya_array[$i][2];
}
}
#%yaoya = ('みかん' => {'個数' => 3, '値段' =>300});
print Dumper(\%yaoya);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- Visual Basic(VBA) 型が一致しませんとエラー 6 2023/07/06 20:14
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) VBAのフィルター操作 5 2023/08/08 09:48
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数の配列の要素を繰り返し処...
-
grep関数を用いた複数行からの抽出
-
Perlについて教えてください!
-
perlでファイルの拡張子を除い...
-
[Perl]長すぎるif文を簡単にしたい
-
phpのmysql_fetch_arrayに該当...
-
ソート時同じ値がある場合、表...
-
画面を強制的に再描画させる方法
-
GIFアニメをループさせたくない
-
VBAでの一時停止と再開の方法
-
素数であるかどうかを判定する...
-
CSVファイルの特定の行だけを読...
-
テキストボックスの名前に変数...
-
C#で別のフォームのprogress ba...
-
うるう年判定のアルゴリズム
-
エクセルVBAで
-
メビウスループの画像
-
エディットボックスのテキスト...
-
Do whileでExitせず、ループの...
-
明示的なオブジェクトの削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースから取得したデー...
-
perlで2つの配列を比較する方...
-
perlでファイルの拡張子を除い...
-
python質問
-
QNo.3258883データベースから取...
-
組み合わせを作るアルゴリズム
-
grep関数を用いた複数行からの抽出
-
アルファベットn文字の組み合わ...
-
非共通要素を抜き出す
-
ハッシュのハッシュの値代入で...
-
桁数指定と四捨五入
-
複数の配列の要素を繰り返し処...
-
正規表現 perl 連続ヒットの...
-
配列に入った変数を二度使いたい
-
サブルーチンへ渡した配列のリ...
-
index関数で複数個抜き出す
-
二次元配列のつかいかた。
-
プログラミングについて。 1つ...
-
画面を強制的に再描画させる方法
-
VBのReturnの使い方
おすすめ情報