perl中的数据结构

来源:互联网 发布:网络上分打鱼的骗局 编辑:程序博客网 时间:2024/05/12 01:33

1 给列表和引用赋值

# 给一个数组赋予一个数组引用列表。

@Aoa = ( ["fred", "barney" ], ["george", "jane", "elroy" ], ["homer", "marge", "bart" ], );

print $Aoa[2][1]; # 打印 "marge"

 

整个列表都封装在圆括弧里,而不是花括弧里,因为你是在给一个列表赋值而不是给引用赋值。

如果你想要一个指向数组的引用,那么你要使用方括弧:

 

# 创建一个指向一个数组的数组的引用。
$ref_to_AoA = [
[ "fred", "barney", "pebbles", "bamm bamm", "dino", ],
[ "homer", "bart", "marge", "maggie", ],
[ "george", "jane", "elroy", "judy", ],
];

print $ref_to_AoA->[2][3]; # 打印 "judy"

2 向数组中增加新的行和新的列
增加新的列:push(@arr,['a',b']);
增加新的行: 可以直接赋值
for $x (0..9){ # 对每一行...
for $y (0..9) { # 对每一列...
$Aoa[$x][$y] = $x+$y; # ...设置调用
}
}

如果需要打印数组中的每个元素的值:
foreach my $o1(@Aoa)
{
foreach my $i1(@{$o1})
{
print $i1."/n";
}
}
如果需要打印行:
for $row (@Aoa) {
print "@$row/n";
}

3访问数组的片段:
@part = ();
for ($y = 7; $y < 13; $y++) {
push @part, $AoA[4][$y];
}
或者:@part = @{ $AoA[4] } [7..12];

3 数组使用时候的常见错误:
for $i (1..10) {
@array = somefunc($i);
$AoA[$i] = /@array; # 错了!
}
错误原因分析:
虽然在每次循环中@array都发生了变化,但循环完成之后,$AOA中所有的值都指向同一数组的引用。
因此 print @{$AoA[1]} 将检索和 print @{$AoA[2]} 一样的数值。

正确的做法为:
for $i (1..10) {
@array = somefunc($i);
$AoA[$i] = [ @array ]; # 正确!
}

在 @array 周围的方括弧创建一个新的匿名数组,@array 里的元素都将拷贝到这里。实际上[@array]返回的为匿名变量。


数组的散列:
散列的初始化
my %HoA = (
flintstones => [ "fred", "barney" ],
jetsons => [ "george", "jane", "elroy" ],
simpsons => [ "homer", "marge", "bart" ],
);
向散列中添加新的元素:
$Hoa{test}=[ "tinky winky", "dipsy", "laa-laa", "po" ];
遍历散列中的元素:
for $family ( keys %HoA ){
print "$family: @{ $HoA{$family} }/n";
}

对散列追加索引:
for $family ( keys %HoA ) {
print "$family: ";#获取关键字
for $i ( 0 .. $#{ $HoA{$family} }) {#
$#{ $HoA{$family} }表示关键字多对应的数组的下标
print " $i = $HoA{$family}[$i]";#获取关键字所对应的数组中的具体的某个值
}
print "/n";
}