编程学习biancheng.45soft.com 本站提供了各种在线教程和资料,供大家学习与参考.
编程学习
当前位置: 主页 > Perl > 数组和散列 > Perl 数组和散列 访问和打印散列的散列

Perl 数组和散列 访问和打印散列的散列

你可以用下面的方法设置键字/数值对:

$HoH{flintstones}{wife} = "wilma";

要把某个键字/数值对变成大写,对该元素应用一个替换:

$HoH{jetsons}{'his boy'} =~ s/(\w)/\u$1/;

你可以用先后遍历内外层散列键字的方法打印所有家族:

for $family ( keys %HoH ) {
     print "$family: ";
     for $role ( keys %{ $HoH{$family} } ){
         print "$role=$person ";
     }
     print "\n";
}

在非常大的散列里,可能用 each 同时把键字和数值都检索出来会略微快一些(这样做可以避免排序):

while ( ($family, $roles) = each %HoH ) {
     print "$family: ";
     while ( ($role, $person) = each %$roles ) {
         print "$role=$person";
     }
     print "\n";
}

(糟糕的是,需要存储的是那个大的散列,否则你在打印输出里就永远找不到你要的东西.)你可以用下面的方法先对家族排序然后再对脚色排序:

for $family ( sort keys %HoH ) {
     print "$family:  ";
     for $role ( sort keys %{ $HoH{$family} } ) {
         print "$role=$HoH{$family}{$role} ";
     }
     print "\n";
}

要按照家族的编号排序(而不是 ASCII 码(或者 utf8 码)),你可以在一个标量环境里使用 keys:

for $family ( sort { keys %{$HoH{$a} } <=> keys %{$HoH{$b}}} keys %HoH ) {
     print "$family: ";
     for $role ( sort keys %{ $HoH{$family} } ) {
         print "$role=$HoH{$family}{$role};
     }
     print "\n";
}

要以某种固定的顺序对一个家族进行排序,你可以给每个成员赋予一个等级来实现:

$i = 0;
for ( qw(husband wife son daughter pal pet) ) { $rank{$_} = ++$i }

for $family ( sort { keys %{$HoH{$a} } <=> keys %{$HoH{$b}}} keys %HoH ) {
     print "$family: ";
     for $role ( sort { $rank{$a} <=> $rank{$b} } keys %{ $HoH{$family} }) {
         print "$role=$HoH{$family}{$role} ";
     }
     print "\n";
}



编程学习 Perl 数组和散列 访问和打印散列的散列 转载请保留此行.谢谢.

Perl