perl 将数组的元素对应为hash的key 和value

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl 将数组的元素对应为hash的key 和value相关的知识,希望对你有一定的参考价值。

sub readDic

my($dic)=@_;
open(In,$dic);
while(<In>)
chomp;
@item=split(" ",$_);
$len=length($item[1]);#词语
$word=substr($_,0,$len);
$pin=substr($_,$len,length($_)-$len);#拼音
%pinyin=();
$pinyin$word=$pin;

close(In);

我把文件的每一行按“:”拆分后放到一个数组里,希望数组的第一个值是hash表的key,第二个值是hash表的value。执行后结果只能显示最后一行,这样写有错误么?

因为你的 %pinyin = () 放了在 while 入面, 所以, 每读一行, %pinyin 就被清空了一次.
照你的原意, 应该将 %pinyin=() 放在 while 之前. ( 其实不写这一行都可以 )
参考技术A %pinyin=();放到open后面试试。

perl学习hashes

一:  哈希概念

    是一种数据结构,可容纳很多值,并能随机存取;由关键字与索引值构成<key,value>;

    key值是唯一的

二:  应用场景:

    根据主机名找对应的IP地址,

    根据IP地址找主机名,

    按单词统计出现的次数,

    按驾照号码找出对应的姓名

    ....................

三:  哈希的声明与赋值

1:  声明%

    eg:my %tab;

2:  赋值

    A:使用列表对哈希进行赋值,但必须有偶数个成员(键/值对)。例如

    

    B:可用箭头符号=>将哈希赋值中的键/值区分开来

    

3:  hash可转换成列表

    eg:my @arrays = %tab;

4:  hash复制

    eg:my %new_hash=%hash;

      my %inverse_hash=reverse %hash(哈希值value唯一的情况才有效)

5:  访问哈希元素

    A:访问hash中的单个元素,使用花括号

      eg:my $value = $scores{$key};

      my $value2 = $scores {"xiaoming"};

    B:可以将单个的哈希元素内插到双引号字符串中

      eg:print “xiaoli\'s score is $scores{"xiaoli"}\\n”;

    C:%ENV 获取系统环境的配置信息(path)

      eg:

 

6:   例子

    

          输出:  

    use Data::Dumper;

    print Data::Dumper->Dumper([\\%scores1],[\'scores1\']);  #调用类Data::Dumper

三:  哈希操作

1:  keys

    返回关键字列表;my @name = keys %scores;

2:  values

    返回值列表;my @scores = values%scores;

3:  each

    返回一对值;my($name,$score) = each %scores

 4:  exists

    检查hash中是否存在指定的关键字,存在返回1;my $person = "xiaoming"; exists $scores{$person};

5:  delete

    删除hash中指定的键与对应的值;delete $scores{$person};

6:   例子

     

        接上文

      输出:

 

    

 

 

 

 

 

    

 

    

 

以上是关于perl 将数组的元素对应为hash的key 和value的主要内容,如果未能解决你的问题,请参考以下文章

perl hash问题

[perl] perl 中二维哈希hash 与python 二维字典dict

哈希表(hash table)基础概念

HashMap中 get(K key) 和 put(K key,V value) 的具体过程

HashMap和ConcurrentHashMap 源码关键点解析

perl学习hashes