Chinaunix首页 | 论坛 | 博客
  • 博客访问: 855471
  • 博文数量: 253
  • 博客积分: 6891
  • 博客等级: 准将
  • 技术积分: 2502
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-03 11:01
文章分类

全部博文(253)

文章存档

2016年(4)

2013年(3)

2012年(32)

2011年(184)

2010年(30)

分类: Python/Ruby

2011-07-25 14:14:04

# 初始化 %h为空数组
%h = {};
# 用数组初始化%h为 a=>1, b=>2
%h = ('a', 1, 'b', 2);
# 意义同上,只是另一种更形象化的写法。
%h = ('a'=>1, 'b'=>2);
#如果key是字符串,可以省略引号。下面这行和上面那行是一样的
%h = (a=>1, b=>2);
所以当数字做为key时,可以用$h{1} 或 $h{'1'};

这些keys 可以是任意的字符串,你可以使用任何的字符串作为key。但,它们是唯一的;就像数组中只有一个元素的索引。keys 是唯一的,但values 可以重复。hash 的value 可以是数字,字符串,undef,或者它们的混合◆,但key 是唯一的。

  1. #!/usr/bin/perl

  2. %family_name = ("hong", "liu", "fang", "chen", "gang", "lu");
  3. @names = %family_name;

  4. my %last_name = (
  5.         "fred" => "flintstone",
  6.         "dino" => undef,
  7.         "barney" => 'rubble',
  8.         "betty" => "rubble",
  9.         );

  10. @last = %last_name;
  11. print "@names \n @last\n";
@names = %family_name 很容易的将hash转为列表。
keys 函数会返回此hash 的所有keys,values 函数将返回所有的values。如果hash 中没有元素,则此函数将返回空列表:
  1. my %hash = ('a' => 1, 'b' => 2, "c" => 3);
  2. my @k = keys %hash;
  3. my @v = values %hash;

  4. %h = reverse %hash;
  5. my @ks = keys %h;

  6. print "@k\n@v\n @ks\n";
Perl 并不维护hash 中元素的顺序。但,其中keys按照某种顺序存储,则其对应的values 也是这个顺序

my $count = keys %hash; #得到3,是指有3 个key/value 对如果想迭代hash 的每一个元素(如,检查每一个元素),一种通常的方法是使用each 函数,它将返回key/value 对的2元素列表。实践中,一般只在while 循环中使用each:
  1. while(($key,$value) = each %hash){
  2.     print "$key => $value";
  3. }
上述方法得到的key/value是无序的,要想得到有序的可以:
  1. foreach $key (sort keys %hash){
  2.     $value = $hash{$key};
  3.     print "$key => $value\n";
  4. }

$hash{"a"}得到 key a 对应的value;

要查看hash 中是否存在某个key(某人是否有借书卡),可以使用exists 函数,如果hash 中存在此key,则返回true,这和是否有对应的value 无关

  1. if(exists $hash{"a"}){
  2.     print "yes\n";
  3. }
delete 函数将某个给定的key(包括其对应的value)从hash 中删除。(如果不存在这个key,则什么也不做;不会有警告或者错误信息。)
my $person = “betty”;
delete $books{$person}; #将$person 的借书卡删除掉
这和hash 中存储的为undef 是不同的。使用exists($books{“betty”})将给出相反的结果。使用delete 后,hash 中将不会存在
此key

阅读(407) | 评论(0) | 转发(0) |
0

上一篇:句柄1

下一篇:regular expression

给主人留下些什么吧!~~