1

すべての値を取得して出力する方法。コードでは、キーごとに複数の値が続きます。

%ages = (
" Michael Caine" => {39,34,11,12},
" Dirty Den" => {34,56,76,58},
" Angie" => {27,56,78,89}
);    

@keys = keys %ages;
@val = values %ages;
print @keys;
print @val; #it will not work in case of multiple values per key
4

3 に答える 3

3

あなたには3つの問題があります。

  1. arrayrefsではなくhashrefsを使用しています
  2. 何も割り当てていません@val(少なくとも、質問を編集する前は割り当てていませんでした)
  3. 参照を逆参照するために何もしていません

そのような:

use v5.10;

my %ages = (
" Michael Caine" => [39,34,11,12],
" Dirty Den" => [34,56,76,58],
" Angie" => [27,56,78,89]
);    

foreach my $key (keys %ages) {
    say $key;
    say @{$ages{$key}};
}
于 2012-08-07T10:52:07.820 に答える
1
%ages = (
" Michael Caine" => [39,34,11,12],
" Dirty Den" => [34,56,76,58],
" Angie" => [27,56,78,89],
);    

@keys = keys %ages;
@val = values %ages;
print "@keys\n";
print "@{$_}\n" for @val;
于 2012-08-07T11:15:46.823 に答える
1

Bhargav Gor さん、これはキーに複数の値を格納する一般的な方法です。

しかし、

  1. これは匿名のハッシュ、つまりキーと値のペアであることに注意してください: {39,34,11,12} = ("39"=>34, "11"=>12)

  2. これは無名配列です: [39,34,11,12]

1 を使用しました。これは、%ages ハッシュの値として別のハッシュを使用していることを意味します。

%ages =
" Michael Caine" => ("39"=>34,"11"=>12),
" Dirty Den" => ("34"=>56,"76"=>58),
" Angie" => ("27"=>56,"78"=>89)

キー「Michael Caine」のキー「39」の値を抽出したい場合

print %{$ages{" Michael Caine"}}->{"39"}  #prints 34

本当にそのような構造が必要な場合は、これがすべての値を表示する方法です

foreach(keys %ages) {
  $name = $_;
  foreach(keys %{$ages{$name}}) {
    print %{$ages{$name}}->{$_},",";
  }
  print "\n";
}
#output:
#>34,12,
#>56,58,
#>56,89,

この種の構造が必要だったとは思いません。おそらく、配列 (無名配列) を使用したかったのでしょう。

%ages = (
" Michael Caine" => [39,34,11,12],
" Dirty Den" => [34,56,76,58],
" Angie" => [27,56,78,89]
);

これで、次のような出力を簡単に表示できます。

foreach(keys %ages) {
  $name = $_;
  foreach( @{$ages{$name}} ) {
    print $_,",";
  }
  print "\n";
}
#output:
#>39,34,11,12,
#>34,56,76,58,
#>27,56,78,89,

急いで申し訳ありません、タイプミスで申し訳ありません。そのようなストレージに対して何をすべきかを理解していただければ幸いです

于 2012-08-09T19:37:08.213 に答える