6,散列(perl语言笔记)

1,何谓散列
散列式一种数据结构,和数组相同之处:可以包含任意多个值,并能让你随心所欲地取用这些值;和数组不同之处;数组是以数字来编索引,而散列则是用名字来寻找相应的值。换句话说,散列的索引值(index),此处称为键(key),并不是数值,而是互补相同的任意字符串。

值得一提的是:虽然这些键互不相同,但是他们所对应的值却可能重复。散列的值可能全部为数字,全部为字符串,undef或是这些类型的混合,但是散列的键则全部是互补相同的任意字符串。


2,访问散列元素
要访问散列元素,请使用如下的语法:
$hash($some_key)
这和访问数组的做法类似,但是我们会在索引值(散列键)旁边使用花括号,而不是方括号。另外,键表达式(keyexpression)现在是字符串,而不是数值;

$family_name{"fred"} = "astaire"; #填新值到已存在的元素
$bedrock = $family_name{"fred"}; #变成“astaire”,旧的值消失了

3,访问整个散列
若要引用整个散列,请以百分比符号(%)开头。
为了方便起见,散列可以被转换成列表,反之亦然。对散列赋值等于在列表上下文中赋值,其中的列表则是由“键-值对”所组成。
%some_hash = ("foo",35,"bar",12.4,2.5,"hello","wilma",1.72e30,"betty",byen");
散列的值(在列表上下文中)则是简单的“键-值对”列表;

4,散列的赋值运算
比较常见的做法是以某种方式转换散列
%inverse_hash = reverse %any_hash;

5, 大箭号
将列表赋值到散列时,有时候哪个元素是键,那个元素是值并不怎么明显。我们可以通过大箭号(=>)来产生散列
my %last_name = ( #散列可以使词法变量
"fred" => "flintstone",
"dino" => undef,
"barney" => "rubble",
"betty" => "rubble",
};

6, 散列函数
keys和values函数
keys函数会返回当前散列中所有的键,而values函数返回的则是相应的每个值。

7,each函数
假设你想对整个散列进行迭代,使用each函数时常见的做法。此函数会返回含有两个元素的列表,也就是“键-值对”。之后每次对同一的散列调用each时,它会返回下一组“键-值对”,直到所有的元素都被访问到。在没有更多的"键-值对"时,each会返回空列表.
实际使用时,唯一适合使用each的地方时在while循环中,
while ( ($key,$value) = each %hash) {
print "$key => $valuen";
}

8, exists函数
要查看某个键是否存在于散列中,请使用exists函数。假如散列中有这个键,它就会返回真值,无论相应的值是否为“真”
if (exists $books{"dino"}) {
print "Hey,there's a library card fro dino!n";
}
也就是说,如果“dino”出现在key %books所返回的键的列表中,exists $books{"dino"}才会返回真值。

9,delete函数
delete函数将会从列表移出你所指定的键(和相应的值)。假如没有这样的键,它就会直接结束,而不会出现任何警告或错误信息
my $person = "betty";
delete $books{$person};

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/312079/viewspace-245690/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/312079/viewspace-245690/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值