Perl Array of Hashes Data Structure
Jump to navigation
Jump to search
A Perl Array of Hashes Data Structure is a Perl Array Data Structure whose Array Elements are composed of Perl Hash Data Structures.
- AKA: Perl Array of Hashes.
- Context:
- It can be useful for Attribute-Value Data Records that need to be Sequential Access Task.
- Example(s):
- Counter-Example(s):
- See: TABularDataFileMgmt Project.
References
2010
- (Melli, 2010) ⇒ Gabor Melli. (2010). “Perl Array of Hashes - Examples." GM-RKB ; Populate manually
- Manually define an array of hashes.
my @file_attachments = (
{file ⇒ 'test1.zip', price ⇒ '10.00', desc ⇒ 'the 1st test'},
{file ⇒ 'test2.zip', price ⇒ '12.00', desc ⇒ 'the 2nd test'},
{file ⇒ 'test3.zip', price ⇒ '13.00', desc ⇒ 'the 3rd test'},
{file ⇒ 'test4.zip', price ⇒ '14.00', desc ⇒ 'the 4th test'}
);
- Get the number of items (hashes) in the array.
my $file_no = scalar (@file_attachments); # $file_no is now: 4 in this instance as there is 4 hashes in the array.
- Loop through the hash and printing out all the hash "file" elements.
for (my $i=0; $i < $file_no; $i++) {
print '$file_attachments [$i]{'file'} is:'. $file_attachments [$i]{'file'}."\n";
}
- Loop through the hash and printing out all the hash "price" elements.
for (my $i=0; $i < $file_no; $i++) {
print '$file_attachments [$i]{'price'} is:'. $file_attachments [$i]{'price'}."\n";
}
- Loop through the hash and printing out all the hash "desc" elements.
for (my $i=0; $i < $file_no; $i++) {
print '$file_attachments [$i]{'desc'} is:'. $file_attachments [$i]{'desc'}."\n";
}
- Sample output of the looks above
$file_attachments [0]{'file'} is: test1.zip
$file_attachments [1]{'file'} is: test2.zip
$file_attachments [2]{'file'} is: test3.zip
$file_attachments [3]{'file'} is: test4.zip
$file_attachments [0]{'price'} is: 10.00
$file_attachments [1]{'price'} is: 12.00
$file_attachments [2]{'price'} is: 13.00
$file_attachments [3]{'price'} is: 14.00
$file_attachments [0]{'desc'} is: the 1st test
$file_attachments [1]{'desc'} is: the 2nd test
$file_attachments [2]{'desc'} is: the 3rd test
$file_attachments [3]{'desc'} is: the 4th test
@LoH = (
{
lead ⇒ "fred",
friend ⇒ "barney",
},
{
lead ⇒ "george",
wife ⇒ "jane",
son ⇒ "elroy",
},
{
lead ⇒ "homer",
wife ⇒ "marge",
son ⇒ "bart",
},
);
# reading from file
# format: lead=fred friend=barney
while (<> ) {
$rec = {};
for $field (split ) {
($key, $value) = split /=/, $field;
$rec->{$key} = $value;
}
push @LoH, $rec;
}
# reading from file
# format: lead=fred friend=barney
# no temp
while (<> ) {
push @LoH, { split /[\s=]+/ };
}
# calling a function that returns a key,value array, like
# "lead","fred","daughter","pebbles"
while (%fields = getnextpairset() ) {
push @LoH, { %fields };
}
# likewise, but using no temp vars
while (<>) {
push @LoH, { parsepairs($_) };
}
# add key/value to an element
$LoH[0]{pet} = "dino";
$LoH[2]{pet} = "santa's little helper";
# ACCESS AND PRINT
# one element
$LoH[0]{lead} = "fred";
# another element
$LoH[1]{lead} =~ s/(\w)/\u$1/;
# print the whole thing with refs
for $href (@LoH ) {
print "{ ";
for $role (keys %$href ) {
print "$role=$href->{$role} ";
}
print "}\n";
}
# print the whole thing with indices
for $i (0 .. $#LoH ) {
print "$i is { ";
for $role (keys %{ $LoH[$i] } ) {
print "$role=$LoH[$i]{$role} ";
}
print "}\n";
}
# print the whole thing one at a time
for $i (0 .. $#LoH ) {
for $role (keys %{ $LoH[$i] } ) {
print "element $i $role is $LoH[$i]{$role}\n";
}
}
2001
- (Cross, 2001) ⇒ David Cross. (2001). “Data Munging with Perl.” Manning Publications. ISBN:1930110006