免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5812 | 回复: 12
打印 上一主题 下一主题

如何取出数组中的不同元素并存入一个数组里 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-27 14:10 |只看该作者 |倒序浏览
以下的数组:@read={"0101","0101","0102","0101","0103","0102"}
我如何得到这样的数组:@read={"0101","0102","0103"}
急用,谢谢大家。

论坛徽章:
0
2 [报告]
发表于 2008-08-27 14:44 |只看该作者
我很久以前写的一个专门处理的函数,可能比较烂,但是处理你的问题应该没问题,呵呵。
哦,还是小小的修改一下。

  1. sub aonly
  2. {
  3.         my @atemp = @_;
  4.         my @atemp1;
  5.   for my $i (0..$#atemp)
  6.         {
  7.                 my $atmp1 = rtrim($atemp[$i]);
  8.                 if($atmp1 ne "")
  9.                 {
  10.                         for my $j (($i+1)..$#atemp)
  11.                         {
  12.                                 my $atmp2 = rtrim($atemp[$j]);
  13.                           if($atmp2 eq $atmp1)
  14.                                 {
  15.                                         $atemp[$j]="";
  16.                                 }
  17.                         }
  18.                         push @atemp1,$atmp1;
  19.                 }
  20.         }
  21.         @atemp=@atemp1;
  22.         return @atemp;
  23. }
复制代码

[ 本帖最后由 不死草 于 2008-8-27 14:58 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-08-27 14:45 |只看该作者
呵呵,忘了,还有个配合的函数。。。

  1. # trim space / tab at the right end
  2. sub rtrim {
  3.         my $r = shift;
  4.         $r =~ s/[      \n\r]+$//;
  5.         return $r;
  6. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2008-08-27 15:01 |只看该作者

回复 #3 不死草 的帖子

谢谢,多谢,问题解决了

论坛徽章:
0
5 [报告]
发表于 2008-08-27 15:05 |只看该作者
两个for效率低一点 用hash好一点

论坛徽章:
0
6 [报告]
发表于 2008-08-27 15:53 |只看该作者
use List::MoreUtils qw(uniq);

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2008-08-27 15:59 |只看该作者

论坛徽章:
0
8 [报告]
发表于 2008-08-27 16:03 |只看该作者
哦,好吧,用hash...呵呵。

  1. sub No_Duplicate_Array
  2. {
  3.         my @array = @_;
  4.         my $hash;
  5.         for my $i(0..$#array)
  6.         {
  7.                 $hash{$array[$i]} = undef;
  8.         }
  9.         return @array = keys(%hash);
  10. }

复制代码

论坛徽章:
0
9 [报告]
发表于 2008-08-27 17:10 |只看该作者

论坛徽章:
0
10 [报告]
发表于 2008-08-27 17:26 |只看该作者
原帖由 andyhau791010 于 2008-8-27 14:10 发表
以下的数组:@read={"0101","0101","0102","0101","0103","0102"}
我如何得到这样的数组:@read={"0101","0102","0103"}
急用,谢谢大家。

Are you sure that your array expression with "{}" instaed of "()" is RIGHT?
@read={"0101","0101","0102","0101","0103","0102"}
That is an array contains reference to hash!!!

For extracting an uniq array, hash and map can be used too:
@read = ("0101", "0101", "0102", "0101", "0103", "0102");
%seen = map {$_, 1} @read;
@uniq = sort keys %seen;
print "@uniq";
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP