设为首页 收藏本站
查看: 1119|回复: 0

[经验分享] Perl寻找去除数组中重复元素

[复制链接]

尚未签到

发表于 2015-12-26 08:35:50 | 显示全部楼层 |阅读模式
  写一个小程序时候,需要去除一个数组中的重复元素,搜索了一下,找到的代码主要是两种,一种是使用grep函数,一种是转换为hash表,代码分别如下:
使用grep函数代码片段:
代码:


my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
my %count;
my @uniq_times = grep { ++$count{ $_ } < 2; } @array;
  

使用转换hash代码片段:
代码:


my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
my %saw;
@saw{ @array } = ( );
my @uniq_array = sort keys %saw;
  

使用grep那种方法并不是很好懂,我尝试解释一下,未必说得清楚或者正确。其实就是把数组的每个元素作为一个hash表的key,++之后第一个元素出现的时候值就是1,如果第二次出现这个值就是2了。其实就是统计了数组每个元素的出现次数,少于2次的就放到新的数组当中。我写了个比较好懂的代码,和使用grep方法的代码原理大致相同,但是又不完全一样,代码如下:
代码:


my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
my %count_hash;
my @uniq_array;
foreach my $value ( @array )
{
  if( exists( $count_hash{ $value } ) )
  {
     next;
  }
  else
  {
    $count_hash{ $value } = 1;
    push( @uniq_array, $value );
  }
}
  



#!/usr/bin/perl
use strict;
my %hash;
my @array = (1..10,5,20,2,3,4,5,5);
#grep 保存符合条件的元素
@array = grep { ++$hash{$_} < 2 } @array;
print join(" ",@array);
print "n";
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-156398-1-1.html 上篇帖子: perl教程(1) 下篇帖子: 一段用来清除C++/C代码中空白行的perl脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表