[英]How do I efficiently extract all values with a certain key name from a hash of hashes?
[英]How do I extract all array values from a hash of hashes
新手在这里。 如果我错过了详细信息,请记录下来。
在perl 5
我有一个看起来像这样的文件
precedence = 2
new york
new jersey
florida
precedence = 3
kings
essex
dade
precedence = 1
brooklyn
newark
miami
我没有问题循环文件并创建一个保存优先级值的$ var和一个数组(@tmp),它保存行直到下一个“section”(优先级= x)
我需要最终按照首选项的顺序将所有部分推送到最终数组中
所以
print @final;
结果是
brooklyn
.....
new york
.....
kings
.....
注意:我从来不知道将会有多少部分或每个部分将有多少行
我认为perhapes可以制作哈希哈希并将每个数组放入HoH中
push @{ $hash{"section_2"} }, @tmp ;
但我不知道
a)如果每次加载一个部分(在每个循环开始时消隐之后)重用@tmp数组会出现问题
b)我无法弄清楚如何在关键字“section_2”中获取数组中的所有值并将它们推入@final
当然可能有更好的方法。
HoH毫无意义。 如果您预计优先级差异很大(1,1000000,1000000000),则可以使用HoA,
my $precedence = 0;
my %data;
while (<>) {
chomp;
if (/precedence\s*=\s*([0-9]+)\z/) {
$precedence = $1;
next;
}
push @{ $data{$precedence} }, $_;
}
my @final = map @{ $data{$_} }, sort { $a <=> $b } keys %data;
但AoA最有可能更合适。
my $precedence = 0;
my @data;
while (<>) {
chomp;
if (/precedence\s*=\s*([0-9]+)\z/) {
$precedence = $1;
next;
}
push @{ $data[$precedence] }, $_;
}
my @final = map @$_, grep $_, @data;
我不确定我是否完全理解你要完成的任务,但是如果要打印每个优先级值,然后打印其数组中的值,可以尝试这样做:
my $hoh;
#This is not how you populate your HoH, I hard code it to simplify
@{$hoh->{2}->{'ARRAY'}} = ('new york', 'new jersey', 'florida');
@{$hoh->{3}->{'ARRAY'}} = ('kings', 'essex', 'dade');
@{$hoh->{1}->{'ARRAY'}} = ('brooklyn', 'newark', 'miami');
foreach my $prcdnc(keys(%$hoh))
{
print "\nprcdnc = ".$prcdnc;
my @prcdncAry = @{$hoh->{$prcdnc}->{'ARRAY'}};
my $prcdncAryStr = join(",", @prcdncAry);
print "\n\t".$prcdncAryStr;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.