||
Perl 语言中没有对数组元素进行去重操作的基础操作符/函数(话说这俩到底怎么界定……),可以写一个子程序来实现,但是似乎又有点费事,杀鸡用牛刀的感觉。最近发现两种利用自增特性来进行去重的操作,非常简洁,而且一眼还不一定看得懂,记录一下。
第一种是:
my @uniq = grep {++$hash{$_}<2} @array;
第二种是:
my @uniq = grep {!$hash{$_}++} @array;
第一种其实挺好理解,若某元素之前已经出现过,则自增后的哈希值会返回 2,因此该元素不会被返回到新的数组中。
第二种我看了好久也没看懂。翻阅小骆驼书关于自增的知识后才恍然大悟,其实这两种都是利用了自增操作的返回值。前一种是前置自增,即先自增,再返回自增后的值;后一种是后置自增,即先返回当前值,再自增。
另外,模块 List::MoreUtils 提供 uniq 函数。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-19 22:22
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社