免费注册 查看新帖 |

Chinaunix

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

请教:一段代码的解释 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-19 17:13 |只看该作者 |倒序浏览
找出数组中不重复的元素,以下是代码:
  1. #!/usr/bin/perl -w

  2. use strict;

  3. my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
  4. my %diff;
  5. my %same;
  6. my @diff = grep(!$diff{$_}++, @array);

  7. print "@diff\n";
复制代码
请问:@diff = grep(!$diff{$_}++, @array);这一句具体执行过程是什么呢?!又起什么作用?想了半天迷迷糊糊的想不明白。

求职 : 技术支持/维
论坛徽章:
0
2 [报告]
发表于 2010-09-19 17:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2010-09-19 17:39 |只看该作者
以数组@array中的值为键,以数目为值,如果不重复就加到@diff中

论坛徽章:
0
4 [报告]
发表于 2010-09-19 20:42 |只看该作者
本帖最后由 珞水的大叔 于 2010-09-19 20:47 编辑
  1. @diff = grep(!$diff{$_}++, @array)
复制代码
它相当于:
  1. for(@array){
  2.     if(not exists $diff{$_}){
  3.         push @diff,$_;
  4.     }
  5.     $diff{$_}++;
  6. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-09-19 21:39 |只看该作者
回复 1# telecomshy


    输出列表中的不同元素, 和下面的一样

@unique = grep { ++$count{$_} < 2 }
               qw(a b a c d d e f g f h h);
print "@unique\n";

输出结果: a b c d e f g h

论坛徽章:
0
6 [报告]
发表于 2010-09-20 10:21 |只看该作者
回复 4# 珞水的大叔


    if(not exists $diff{$_}){应该是相当于if(! $diff{$_}){

论坛徽章:
0
7 [报告]
发表于 2010-09-20 11:07 |只看该作者
感谢大家回复,大致明白了。
才发现没有定义的变量++,会等于0....
  1. my $a;
  2. $a++;
  3. print $a;
复制代码
$a会等于0。

先前这里没弄清楚,所以怎么都没想明白。

论坛徽章:
0
8 [报告]
发表于 2010-09-20 11:28 |只看该作者
找出数组中不重复的元素,以下是代码:请问:@diff = grep(!$diff{$_}++, @array);这一句具体执行过程是什么 ...
telecomshy 发表于 2010-09-19 17:13



     关键在于 hash的 key 不能重复,相当于数据库表中的唯一key

论坛徽章:
0
9 [报告]
发表于 2010-09-20 12:30 |只看该作者
本帖最后由 珞水的大叔 于 2010-09-20 12:31 编辑

回复 6# Perl_Er


    这里的not exists 和 ! 的效果完全相同,所以我就写了not exists,个人感觉这个比较容易理解,呵呵

论坛徽章:
0
10 [报告]
发表于 2010-10-06 21:18 |只看该作者
  1. #!/usr/bin/perl -w

  2. use strict;

  3. my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 );
  4. my %diff;
  5. my %same;
  6. my @diff = grep(!$diff{$_}++, @array);

  7. print "@diff\n";
复制代码
刚试验了一下,发现去掉++也可以
原来++是为了统计重复次数的,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP