複数の配列からfor構文の中で任意の要素を表示させる方法

このQ&Aのポイント
  • 複数の配列からfor構文の中で任意の要素を表示させる方法について教えてください。
  • 例えば、@dat1から@dat17までの特定の要素のみを表示させたい場合、どのようにすればよいのでしょうか?
  • 関連する配列の特定の要素を組み合わせて表示させる方法を教えてください。
回答を見る
  • ベストアンサー

複数の配列からfor構文の中で任意の要素を表示させる

@dat1=(12,11,16,17); @dat2=(21,26,23,20); ・・・ @dat17=(22,34,31,18); for($i=1;$i<=$17;$i++){ print @{"dat$i"};print "\n"; } といったように,@dat1から@dat17まで配列が用意されているときに上の例では当然ながら@dat1全ての要素が表示されます。これを任意の要素のみを表示させたい場合にはどのようにすればよいでしょうか? 例えば@dat1から@dat17までの0番目の要素($dat1~17[0])と1番目の要素($dat1~17[1])のみを表示させたいのですが...

  • backs
  • お礼率85% (564/660)
  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • kapura
  • ベストアンサー率50% (48/95)
回答No.1

求めている回答と違うような気もしますが、@{"dat$i"} のところを単純に ${"dat$i"}[0] とか ${"dat$i"}[1] としたら各配列の0番目や1番目の要素を扱えますよ。

backs
質問者

お礼

早速の回答ありがとうございました。 >求めている回答と違うような気もしますが、 いえいえ,まさにそういうことです。とても助かりました。

関連するQ&A

  • 配列 隣の要素を参照するのですが

    最初に 8つの要素を持つint型の配列(配列名dat)があるとして、最初全要素に「0」が代入されています。scanf関数でn番の要素に「1」が代入されたとします。n番なのでどこに「1」が代入されたかはわからないです。 問題 for文を使用して何番目に「1」が入力されたかを調べますが、以下のルールに従がわなくてなならいです。 ルール ・現在の要素から隣の要素を参照しなくてはいけない。 ・参照する範囲は要素の数「0~7」番 #include<stdio.h> void main() { int i, dat[8]; for(i=0;i<8;i++){ dat[i]=0; } i=0; scanf("%d",&i); dat[i] = 1; for(i=0;i<8;i++){ if(dat[i+1] == 1){print("%d列目に「1」がありました", i+1); } } でも…こうすると0番目の要素が参照されないですそれを回避するには?そして… 最大の要素(dat[7])にきたときは隣を参照しないようにするにはどうすればよいのでしょう?

  • 配列の中のデータの表示(1件分ずつ)

    いつもお世話になっております。 教えていただいた方のおかげで少しずつ出来上がりつつありますm(__)m またお力をお貸しいただければ嬉しいです。。 POST で取得された配列があります。 [i][handle][sex][body] ↓ (例) [0][][][][]→データなし [1][たくみ][男][晴れが好き] [2][あゆみ][女][雪が好き] [3][みゆ][女][曇りが嫌い] : この配列を、一番目の人($が1)から表示させたいと思っていのですが・・・ for ($i = 1; $i <= count ($handle); $i++) { print $i . "人目の名前:" . $_POST['handle'][$i] . "<br>\n"; print $i . "人目の性別:" . $_POST['sex'][$i] . "<br>\n"; print $i . "人目のPR:" . $_POST['body'][$i] . "<br>\n"; print "<br>\n"; } にすると、同じページに3人分のデータが表示されてしまいます。 そうではなく、1ページ目には1番目の人、2ページ目には2番目の人の表示という風にはできないのでしょうか? 教えてくださいm(_)m

    • ベストアンサー
    • PHP
  • 配列の中に配列をセットし、呼び出したい

    配列@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番目の要素を取り出したいという感じです。

    • ベストアンサー
    • Perl
  • 限られた数の配列のみ表示させる

    配列の基本的なことを理解していないので、極めて初歩的な質問で申し訳ありませんが、ご教示お願い致します。 csvを読み込み、条件を満たすデータ(ここでは$row[1]がy)だけで配列を作ります。 $handle = fopen("sample.csv", "r"); while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {if($row[1]=="y"){ $data[] = array( $row[0] ,$row[1] ,$row[2] ,$row[3]); } } fclose($handle); すべての行のデータ(ここでは$row[2]のみ)は下記で表示されます。 foreach ($data as $key => $row) { print $row[2]."<BR>"."\n"; 最初から例えば4行目までのみ表示したい場合 for($i=0;$i<4;$i++){ print $data[$i]."<BR>"."\n"; } 上記では、arreyの文字が4個しか表示されませんが、先の例のように各行の$row[2]を表示させるには、どのようにすればよいのでしょうか。 宜しくお願いします。

    • 締切済み
    • PHP
  • 参照配列の要素数の求め方は?

    リファレンス配列の要素数は、$#では求められないのでしょうか? ------------------------------------- foreach $i(0 .. 3){ $hash->[$i] = $i * 100; } print "\%hashの要素数->$#hash\n"; $ref = \%hash; print "\%{$ref}の要素数->$#{$ref}\n"; -------------------------------------

    • ベストアンサー
    • Perl
  • 配列の中に複数存在する数がいくつあるか

    お世話になります。配列の中に同じ数が存在する数がいくつあるかを調べたいのですが、途中でつまづいてしまいました。 例えば配列arrayの中に、0, 0, 5, 0, 5, 1, 5といった数が格納されているとしたら 複数ある数は0と5の2つなので、2を返す、というだけのプログラムです。 int n=array.length; int cnt=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(array[i]==array[j]){ cnt++; break; } } } return cnt; forループで配列0から同じ数を順番に調べ、もしヒットすればカウントを増やして内側のループをブレイクし、配列1からまた順番に調べようとしたのですが、 上の例の場合、配列0と配列1が同じ数(0)ですので、カウントが余計に増えてしまいます。 どのように組めばうまく動作するでしょうか。宜しくお願いします。

    • ベストアンサー
    • Java
  • 配列の要素に同じ値をもたせないプログラムについて

    現在、JAVAの入門書にてプログラムの勉強中です。 その書籍に掲載のプログラムコードがどうしても意図する結果に なりません。入力間違いなどのミスはないか何回も見直しましたが、 どこも入力間違いは見当たりません。 何が原因か教えて頂けますでしょうか。 実行例がこのようになります。 数字は例なのでこの限りではありません。 要素数 : 7 a[0] = 7 a[1] = 5 a[2] = 1 a[3] = 2 a[4] = 9 a[5] = 6 a[6] = 3 プログラムコードが下記になります。 /*配列の全要素を1から10の乱数で埋め尽くす (すべての要素が重複しないようにする*/ 01: import java.util.Random; 02: import java.util.Scanner; 03: 04: class ArrayRandY { 05: 06: public static void main(String[] args) { 07: Random rand = new Random(); 08: Scanner stdIn = new Scanner(System.in); 09: 10: int n; //要素数 11: do { 12: System.out.print("要素数 : "); 13: n = stdIn.nextInt(); //要素数を読み込む 14: } while (n > 10); 15: int[] a = new int[n]; //配列を生成 16: 17: for (int i = 0; i < n; i++) { 18: int j = 0; 19: do { 20: a[i] = 1 + rand.nextInt(10); 21: for ( ; j < i; j++) 22: if (a[j] == a[i]) break; 23: } while (j < i;); 24: } 25: 26: for (int i = 0; i < n; i++) { 27: System.out.println("a[" + i + "] = " + a[i]); 28: } 29: } 30:} 以上です。 これを javac ArrayRandY.java → java ArrayRandY とやると、重複しない結果のときもありますが 重複する値が出てしまうときもあります。 著者のホームページの正誤表を見たのですが情報がありませんでした。 常にこのプログラムの配列の全要素を重複しないようにするには どうしたらよろしいでしょうか。 よろしくお願いいたします。 ちなみに、プログラムコードですが、入力画面ではインデントを 入力しているのですが確認画面ではなぜかインデントが表現 されてません。 大変見苦しいことお詫び申し上げます。

    • ベストアンサー
    • Java
  • 教えてください!!

    perlに関するサイトで 合計を求めるプログラムは @dat(1,2,3,4,5,6,7,8,9,10); $sum = 0; for($i = 0;$i <10; $i++){ $sum+ = $dat[$i]; print "sum = $sum "; } というのを見つけました。 いくつか質問があります。 (1)これは1234・・・と続いているから$i++で1の次は2とあらわされているのか、それとも@datの配列の1番目の次が2番目というのを表しているのか。 もしたまたま続いているからならば、列の1番目の次の処理が2番目というふうにするにはどうすればよいか。 (2)$dat[$i]の[]は何を表しているのか (3)$sum+ = $dat[$i]は合計を求めるものだと思うのですが、$sumが合計のことですよね。$dat[$i]についてなのですが、for文なので順番に$iから足しているということなのでしょうか??いまいちピンと来ません。それに$sum+の+は何を意味しているのでしょうか??? 分かりやすく教えていただけると嬉しいです。

  • 配列の頭に要素を挿入する方法

    初心者です。配列でご教授お願いします。 インデックス0からひとつずつ要素をずらして、配列の一番前に要素を挿入するにはどうしたらいいのでしょうか? int[] a = new int[10]; int n = a.length; for (int i = n-1; i < 1; i--){ a[i] = a[i-1]; } a[0] = 新しい要素 といった感じで書いたのですが、どうもループの中が実行されていないようなのです。 よろしくお願いいたします。

  • 配列の要素がすべてカラかどうかの判断

    ある動的配列にエクセルのセルの値を入れ込みデータがあるかないかでプロシージャーを分岐したいのですが、配列の要素がすべて空であるかどうかの判断で困っています。 例えば   Dat = Worksheets(wrks).Range(rng).Value でDatという配列にrngというセル範囲の値を入れて、   Datのすべての要素が空("")なら~処理1~   Datに1つでもデータがあれば~処理2~ のようにしたいのですが、なにかよい方法はないでしょうか。 アドバイスよろしくお願いいたします。