<Perl> 哈希/列表去重

(原链接)

 

对一个二维hash去重。用perl,php现成的函数就没有了

比如一个hash(%hash),如下:

my %hash = (
                '11' => {
                        'mark' => '14656,13566-13570'
                        'id' => 5
                },
                '21' => {
                        'mark' => '14656,13566-13570'
                        'id' => 5
                },
                '31' => {
                        'mark' => '12345'
                        'id' => 5
                },
                '41' => {
                        'mark' => '12356,13566-13570'
                        'id' => 6
                },
);

里面每一项的mark键值会有重复,想要把这些重复项去掉并存为列表。操作如下:

my %count=();
my @grep = grep {++$count{$hash{$_}{'mark'}} < 2 && $hash{$_}{'id'} == 5} keys %hash;
# 将mark的value值作为%count的key,当遇到重复值时++,最后过滤出%count的value小于2的,即非重复值。返回的是%hash去重后的键名。

由于还需要根据id来过滤,所以在grep里加上了一个条件。

后来需要对一个列表去重,那就简单了,稍加改造:

my @list = ( 'jquery','jquery','mysql','linux','jquery' );

my @grep = grep {++$count{$_} < 2} @list;

 

转载于:https://www.cnblogs.com/danielrocks/p/3249676.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值