<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;

 

posted on 2013-08-10 10:07  daniel+  阅读(632)  评论(0)    收藏  举报

导航