(原链接)
对一个二维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;