免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2370 | 回复: 6
打印 上一主题 下一主题

请教大家个hash数组的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-28 16:03 |只看该作者 |倒序浏览
我有一个列表,比如 aa bb cc dd ee
我想判断一个变量$ch是不是在这个列表里,怎样实现比较好,我想的是把aa bb cc dd ee放在hash数组的key里,然后用exists判断hash数组里有没有$ch这个key,但请问有没有只给哈希数据赋值key而不需要赋值value的写法呢?
%hash_ch=qw(aa bb cc dd ee)这样key和value都赋值了不行。
或者有什么别的方法可能完成这个功能。请教大家。

论坛徽章:
0
2 [报告]
发表于 2011-10-28 16:06 |只看该作者
赋值为空呗
hash就是key/value组合

论坛徽章:
0
3 [报告]
发表于 2011-10-28 16:14 |只看该作者
回复 1# 天下第一菜


    赋下值又何妨?
  1. my %hash_ch;
  2. $hash_ch{$_}++ for qw(aa bb cc dd ee);
复制代码
然后进行你要的判断即可

论坛徽章:
0
4 [报告]
发表于 2011-10-28 16:37 |只看该作者
#!/usr/bin/perl -w
use strict;
my @arr=qw/aa bb dd cc ee/;
my $str= 'aa';
print $str if(grep{$_ eq $str}@arr);
#5.10版本及以上的话还可以智能匹配 @arr ~~ $str 判断

论坛徽章:
0
5 [报告]
发表于 2011-10-28 18:03 |只看该作者
@hash{@array} = ();

论坛徽章:
0
6 [报告]
发表于 2011-10-30 02:16 |只看该作者
4楼说的有些错误,5.10.1以上的版本智能匹配操作符不符合交换律,应当写作 $str ~~ @arr

论坛徽章:
0
7 [报告]
发表于 2011-10-30 08:41 |只看该作者
4楼说的有些错误,5.10.1以上的版本智能匹配操作符不符合交换律,应当写作 $str ~~ @arr
twilightagain 发表于 2011-10-30 02:16


感谢指出其中错误,在5.101的changes里确实提到了智能匹配的变化。
The smart match operator ~~ is no longer commutative. The behaviour of a smart match now depends primarily on the type of its right hand argument.
看来这种对perl版本有要求的代码还是尽量少写为好{:3_183:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP