• ベストアンサー

配列やハッシュで中身が同じか簡単に調べることは可能でしょうか?

pipipi523の回答

  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.1

@ary1と@ary2の比較ならそれなりの処理が必要です >固定でなくどんなデータが入ってきても数やキーが異なっても比較する方法 例えにある配列を比較するならこんな感じでしょうか・・・ ※素人なのでスマートでカッコイイのは書けませんm(_ _;m my @ary1 = (); $ary1[0]{'test_a'} = "a"; $ary1[0]{'test_b'} = "b"; $ary1[1]{'test_a'} = "aa"; $ary1[1]{'test_b'} = "bb"; my @ary2 = (); $ary2[0]{'test_a'} = "a"; $ary2[0]{'test_b'} = "bb"; $ary2[1]{'test_a'} = "aaa"; $ary2[1]{'test_b'} = "bbb"; if($#ary1 != $#ary2){ print "配列の数が異なる\n"; }else{ for($i=0;$i<=$#ary1;$i++){ if(join(",",sort keys(%{$ary1[$i]})) ne join(",",sort keys(%{$ary2[$i]}))){ print "\$ary1[$i]と\$ary2[$i]には異なるキーが存在\n"; }else{ foreach $key (sort keys(%{$ary1[$i]})){ if($ary1[$i]{$key} ne $ary2[$i]{$key}){ print "\$ary1[$i]{'$key'}と\$ary2[$i]{'$key'}は不一致\n"; }else{ print "\$ary1[$i]{'$key'}と\$ary2[$i]{'$key'}は一致\n"; } } } } }

関連するQ&A

  • 配列の中身が""の場合は取り除くという処理

    my @ARY = ("", "A", "", "B"); ↓ @ARY = ("A", "B"); で配列の中身が""の場合は取り除くという処理をしたいのですが 簡単にできる方法がございましたら、ご教授ください。

    • ベストアンサー
    • Perl
  • ハッシュ内の各値部分に配列を展開したい

    ハッシュ内の各値部分に配列を展開したいのですが、下記のようにしてみてるのですが、配列が全部展開されず、はまっております。宜しければご教授願えませんでしょうか。 use Data::Dumper; $Data::Dumper::Indent = 1; $dumpfile='dump.txt'; my @all = (aaa ,bbb); my @cate = qw(yyy zzz); my %hash; foreach my $a ( @all ) { foreach $b ( @cate ) { $hash{$a}[$b] = "$b"; } } open(F,"> $dumpfile") ; print F Dumper(\%hash); close(F); ■実行結果 $VAR1 = { 'bbb' => [ 'zzz' ], 'aaa' => [ 'zzz' ] }; ■イメージしている形 $VAR1 = { 'bbb' => ['yyy','zzz'], 'aaa' => ['yyy','zzz'], }; お手数ですが宜しくお願い致します。

    • ベストアンサー
    • Perl
  • Perlは戻り値で、ハッシュや配列を正しく返さないのでしょうか?

    Perlは戻り値で、ハッシュや配列を正しく返さないのでしょうか? 返せるように見えて実際は、歯抜けのデータなど、不安定で使い物になりません。 よって、リファレンスでスカラー値で利用するのが正論でしょうか? $a = ''; %b = (); @c = (); ○ return ($a, \$b, \$c); × retuen ($a, %b, @c); ○ my ($a, $b, $c) = aru_kansuu($hikkey, ('komori')); × my ($a, %b, @c) = aru_kansuu($hikkey, ('komori'));

    • ベストアンサー
    • Perl
  • ハッシュの中身の表示

    ハッシュの中身の確認ができなくて困っています。 下記のような実行文においてです。 当然、test の戻り値は、スカラーとハッシュです。ハッシュを戻すときには参照渡し記号の\もつけています。 my ($return_code, %hash_data) = test(); 表示しようとすると、 Hash(0x5b04) のような表示にしかなりません、、 (試した表示方法は、下記4つです。) (環境は、WindowsXP上での、ActivePerl-5.10.0.1004 です。) foreach $key ( keys( %Hash ) ) { print "キー値 : $key\n"; print "値 : $Hash{$key} \n " } while ( ( $key , $value ) = each %Hash ){ print "キー値 : $key\n"; print "値 : $value \n " ; } use Data::Dump qw(dump); print dump(\%hash); #print %display_test; 宜しくお願いします。

    • ベストアンサー
    • Perl
  • 配列とハッシュの配列の要素を比較してファイルに書き出したい

    配列Aとハッシュの配列Bがあり、配列の内容をファイルに書き出そうとしています。このとき、パターンマッチをして、Aにしかない場合はAのデータを、Bにしかない場合はBを、両方にある場合は、Aをファイルに出力しようとしています。 以下のようなループのまわし方をしようとして、試行錯誤しましたが、うまい方法を思いつくことができませんでした。 ご教授いただければうれしいです。 while (defined $A[$i]) {  my ($name, $pass);  $j=0;  while (($name, $pass) = each(%{$B[$j]})){    if ($A[$i] =~ /$name/) {    }    $j++;  } $i++; }

    • ベストアンサー
    • Perl
  • 無名配列からハッシュを作りたいのですが・・・

    $VAR1 = [ 'No', 'a', 'i', 'u', 'e', 'o', ]; #VAR1と同じ数の<>区切りの下記のようなデータを読み込み配列に代入 --List----------------------- 1<>あ<>い<>う<>え<>お<> ------------------------- foreach(0..$#List){ @Array=split(/<>/,$List[$_]); } 最終的なイメージは print "$a{No}"; >1 print "$a{a}"; >a となるよう、上記VAR1の無名配列の値をキーに、読み込んだ<>区切りのデータを関連付けて表示させるようにしたいのです。 foreach my$var(@$VAR1){ ...ここをどうすれば配列の値をハッシュのキーとして作成出来るのか頭を悩ませてます。 } 先輩方のお知恵をお借りできませんでしょうか。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • perl:2次元配列の値の取り出し方

    お世話になります。Perlの2次元ハッシュ配列の値の取り出し方をお教えください。以下の コード中、%test だと、値を入れるのが煩雑になるので、%test2や%test3のようなコードにしようと思うのですが、入れた値をとりだすコードが分かりません。。。ご指導ください。 my %test; $test{'A'}{'a'} = 1; $test{'A'}{'b'} = 2; my %test2 = ( 'P' => ['a'=>1, 'b'=>2], 'Q' => ['a'=>3, 'b'=>4] ); my %test3 = ( 'P' => ('a'=>1, 'b'=>2), 'Q' => ('a'=>3, 'b'=>4) );

    • ベストアンサー
    • Perl
  • 配列の数を途中で増やすには?

    はじめまして。 この度、以下のようなプログラムを作りました。 が、途中で配列の数を増やすことになってしまいました。 ------------------------------------------------ struct a{ int int_a; long int_b; }; struct b{ a *aa; }; void main(void){ b *bb; bb = new b[3]; bb[0].aa = new a[5]; bb[1].aa = new a[4]; . . . } ------------------------------------------------ 具体的には、'bb'の配列を3から5に増やすようなやり方を探しています。 元の配列より大きい配列をつくり、そこにコピーすればいいと考えたのですが、 'bb'内の'aa'の配列も動的に作成しているため、それも出来ない状況です。 どなたかやり方を知っている方がいましたら、教えていただきたいです。 下手な説明ですいません。

  • Perlでハッシュや配列で重複するキーについて

    ハッシュで重複するキーが値となるので、このハッシュはabdの3つのキーしか存在しないということでしょうか? %a = ('a'=>1, 'b'=>2, 'a'=>3, 'd'=>4); また、配列の場合はabadと4つ数になるということでしょうか? @a = ('a','b','a','d'); この場合配列で、重複する値を抽出するアルゴリズムが知りたいです。

    • ベストアンサー
    • Perl
  • 二次元配列のハッシュ版の記述方法?

    二次元配列のハッシュ版を実現させたいのですが、 以下の記述で正しいでしょうか? 構文に疎いので教えてください。 #!/usr/bin/perl %HASH_TEST = ( 'あ'=>{'A'=>'1', 'B'=>'2', 'C'=>'3'}, 'い'=>{'A'=>'4', 'B'=>'5', 'C'=>'6'}, ); print $HASH_TEST{'い'}{'B'}; #=> 5が表示されます。 exit; __END__

    • ベストアンサー
    • Perl