1

通常、私はハッシュと配列のさまざまな複雑さすべてに頭を悩ませることができますが、これを機能させることができないようです...

これが私の配列です:

$event['date'] = $my_date;
$event['machine'] = $my_machine;

ハッシュを次のように表示したい

$User{$name}{'allowed'} = 52;
$User{$name}{'denied'} = 4;
$User{$name}{'events'}[] = @event;

各ユーザー(現在は機能しています)をループし、そのユーザー内で各イベントをループする必要があります。

2 つの質問:

  1. イベント配列の複数のインスタンスをハッシュに追加するにはどうすればよいですか?
  2. これらの配列をループするにはどうすればよいですか?

どんな助けでも大歓迎です。

4

3 に答える 3

3

私があなたを完全に正しく理解しているかどうかはわかりません。

「私の配列」と表現するものは、%eventインデックスではなく名前を使用しているため、ハッシュのように見えます。そこで、次のように仮定しましょう。

イベントがあり、各イベントはハッシュ%eventであり、次のように定義されています。

my %event;
$event{date} = $my_date;
$event{machine} = $my_machine;

単純なハッシュ キーでは引用符を省略できることに注意してください。などのようにいくつかのイベントを定義した場合は%event1%event2それらを配列に追加します。これらのイベント ハッシュへの参照を追加する必要があります。

my @events = ( \%event1, \%event2 );

これで、ユーザー ハッシュ イベントを次のように定義する必要があります。

$user{$name}{events} = [ @events ];

ここでも、ユーザーのイベントを配列への参照に設定する必要があります。内容は、イベント リストに含まれるものになります。これは基本的に要素を@eventsユーザーオブジェクトにコピーします。次のように書くこともできます

$user{$name}{events} = \@events;

@eventsただし、配列を直接参照しています。

これで、ループは非常に簡単になりました。

foreach my $name (@names) {
    foreach my $event (@{$user{$name}{events}}) {
        # do something with $event
    }
}

@{ ... }でイベントの単純なリストを取得するために、イベント配列を逆参照しています$event

于 2013-06-19T19:27:49.063 に答える