Perl哈希Hash⽤法之⼊门教程
哈希是⼀种数据结构,和数组类似,可以将值存放到其中,或者从中取回值。但是,和数组不同的是,其索引不是数字,⽽是名字。也就是说,索引(这⾥,我们将它叫key)不是数字⽽是任意的唯⼀的字符串。
key可以是任意的字符串,你可以使⽤任何的字符串作为key,但它们是唯⼀的。
另⼀种思考hash 的⽅法是,把它看作⼀堆数据(a barrel of data),每⼀个数据都有⼀个相应的标签。可以通过标签访问此标签对应的元素。但其中是没有“第⼀个”元素的概念的。在数组中,数组元素从0,Perl学习之哈希hash_马亮的计算机技术1,2 开始编号。但在hash中,没有确定的顺序,因此也没有第⼀个元素。只是⼀些key/value 对的集合。
keys和values均为任意的标量,但keys通常转换为字符串。因此,如果将表达式50/20 作为keys,则其通常被转换为3字符的字符串“2.5”。
由于Perl的“没有不必要的限制”的设计哲学:hash可以是任意⼤⼩,从空hash(没有key/value对),到任何你内存允许的⼤⼩。keys是唯⼀的,但values可以重复。hash的value可以是数字,字符串,undef,或者它们的混合,但key是唯⼀的。
可以把hash看作⼀个简单的数据库,其中每⼀个key下⾯可以有⼀块数据。如果你的任务是关于:“查询重复的”,“唯⼀
的”,“交叉引⽤的”,“查询表”,则hash很可能在这类应⽤中帮上Perl学习之哈希hash_马亮的计算机技术你的忙。
要访问hash 元素,可以使⽤下⾯的语法:$hash{$some_key}
这和访问数组元素的⽅法有些类似,这⾥下标(key)上使⽤的是花括号({}),⽽不是⽅括号([ ])。现在key 的表达式是字符串,⽽⾮数字。
hash的名字和Perl中其它的标识符的命名规则是⼀样的(字母,数字,下划线组成,但不能由数字开头)。
访问不存在的hash元素将得到undef。
要引⽤整个hash,使⽤百分号(%)作为前缀。
为了⽅便,hash可以转换为列表,或者反过来。
可以使⽤如下的语法在hash 之间拷贝:
%new_hash = %old_hash;
将hash转变成其它形式更加常见。例如,我们可以将hash反转:
%inverse_hash = reverse %any_hash;
当给hash赋值时,有时并不明显哪些元素是keys,那些是values,因此发明了⼤箭头符号(=>)。在需要逗号的时候,都可以使⽤⼤箭头符号替换。
perl下载安装教程
如:
复制代码代码如下:
my %last_name = (
"www" => 1,
"eee" => 2,
);
某些有⽤的函数可以对整个hash 进⾏操作。
keys函数会返回此hash的所有keys,values函数将返回所有的values。如果hash中没有元素,则此函数将返回空列表。
复制代码代码如下:
my %hash = ("a"=>1, "b"=>2, "c"=>3);
print my @k = keys %hash;
print my @v = values %hash;
如果想迭代hash的每⼀个元素,⼀种通常的⽅法是使⽤each函数,它将返回key/value对应的2个元素列表。
当对同⼀个hash 函数进⾏⼀次迭代时,将返回下⼀个key/value对,直到所有的元素均被访问。如果没有更多的key/value对,则each函数将返回空表。
复制代码代码如下:
my %hash = ("a"=>1, "b"=>2, "c"=>3);
while(($key, $value) = each %hash)
{
print "$key => $value\n";
}
当然,each返回的key/vlaue对,顺序是混乱的(它其顺序和keys和values函数返回的顺序相同)。如果想将其按序排放,可以对它们排序(使⽤sort)。
复制代码代码如下:
my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
foreach $key (sort keys %hash)
{
$value =$hash{$key};
print "$key => $value\n";
}
要查看hash中是否存在某个key,可以使⽤exists函数,如果hash中存在此key,则返回true,与是否有对应的value⽆关。
复制代码代码如下:
my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
if(exists $hash{'a'})
{
print "true";
}
delete函数将某个给定的key(包括其对应的value)从hash中删除。如果不存在这个key,则什么也不做,不会有警告或者错误信息。
复制代码代码如下:
my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
delete $hash{'a'};
foreach $key (sort keys %hash)
{
$value =$hash{$key};
print "$key => $value\n";
}
你可以在双引号的字符串中使⽤单个hash元素,但不⽀持整个hash 的内插。
复制代码代码如下:
my %hash = ("a"=>1, "b"=>2, "c"=>3, "d"=>4);
foreach $key (sort keys %hash)
{
print "$key => $hash{$key}\n";
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。