0

私は次の構造を持っています(実際にはもっと大きいです):

$param_hash = {
          'param1' => [0, 1],
          'param2' => [0, 1, 2],
          'param3' => 0,
        };

そして、次のように、さまざまなパラメーターの可能なすべての組み合わせを行に出力したいと思います。

param1='0' param2='0' param3='0'
param1='0' param2='1' param3='0'
param1='0' param2='2' param3='0'
...

(このような) 反復が必要であることは理解していますが、それを機能させることはできません。どうすればいいですか?
それとも、パラメーター値のスコープを格納するために別の構造を使用する必要がありますか?

4

3 に答える 3

1
foreach my $key (keys %$param_hash){
    if(ref $param_hash->{$key} eq 'ARRAY'){
        foreach my $value (@{$param_hash->{$key}}){
            print "$key = $ value ";
        }
    }
        else {
            print "$key = $param_hash->{$key} ";
        }
    print "\n"
    }
于 2012-08-02T18:15:28.353 に答える
1

最初に、ハッシュキーで可能な限り長い配列参照を見つける必要があります。このように繰り返します

for my $value (0..$maxValue) {
    foreach my $key (sort keys %$param_hash) {

        unless (ref($param_hash->{$key}) eq 'ARRAY') {
            $param_hash->{$key} = [$param_hash->{$key}];
        }

        print "$key=", $#{$param_hash->{$key}} >= $value ? $param_hash->{$key}->[$value] : 0;
        print ' ';
    }
    print "\n";
}

ここで、 maxValue は可能な限り長い配列参照であり、この場合は 2 です。これにより、質問で説明した方法でフォーマットされます。

于 2012-08-02T18:04:20.917 に答える