0

私はオブジェクトの配列を持っています。

1)それらをどのように繰り返すことができますか?

for  my $element (@nodeArray)
{
print $element; 
}

2) 配列内の各要素をハッシュに配置するにはどうすればよいですか。各要素のキーは $node->id(); になります。各ノード要素の値は、オブジェクトのプロパティになります。したがって、 $node->id() が繰り返されます。

コードはここにあります:

package person; 
sub new { 
        my ($class) = @_;
        my $self = {  
            _id =>  undef,  
            _name   => undef,
            _scores => []
                    }; 
    bless $self, $class;

        return $self;
}

sub id{
     my ( $self, $id ) = @_;
    $self->{_id} = $id if defined($id);
    return $self->{_id};
    }

    sub name{
     my ( $self, $name) = @_;
    $self->{_name} = $name if defined($name);
    return $self->{_name};
    }

    sub scores {
        my ( $self, @scores )= @_;
        if (@scores) { 
            @{ $self->{_scores} } = @scores; 
            };
        return @{ $self->{_scores} };
    }

use strict;
use warnings;

#use person;
use Data::Dumper;
my @nodeArray=undef ;
my %hash = undef;



my $node = eval{person->new();} or die ($@);
   $node->id(1);
   $node->name('bob');
   $node->scores(['34','1','1',]);
   unshift(@nodeArray, $node ) ;

   $node = eval{person->new();} or die ($@);
   $node->id(2);
   $node->name('bill');
   $node->scores(['3','177','12',]);

  unshift(@nodeArray, $node ) ;

print Dumper (@nodeArray); 
4

2 に答える 2

3
foreach my $n (@nodeArray) {
  $hash{$n->id()} = {
    name   => $n->name(),
    id     => $n->id(),
    scores => [$n->scores()]
  };
}

print Dumper(\%hash), "\n";
于 2012-08-27T09:56:56.647 に答える
1

ループmapの代わりに使用することもできますforeach

my %hash = map {
    $_->id() => {
        id => $_->id(),
        name => $_->name(),
        scores => [$_->scores()]
    }
} @nodeArray;
于 2012-08-27T10:32:52.313 に答える