免费注册 查看新帖 |

Chinaunix

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

请教比较两个数组的差异 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-22 14:55 |只看该作者 |倒序浏览
  1. my @a = (1..10);# 1 2 3 4 5 6 7 8 9 10
  2. my @b = (3..6);# 3 4 5 6
  3. my @c = diff(\@a,\@b);
  4. foreach (@c){
  5.         print $_."\n";
  6. }

  7. sub diff{
  8.         my ($array1,$array2) = @_;
  9.         #print "$array1,$array2\n";
  10.         my @array3;
  11.         my %count = ();
  12.         foreach my $element(@$array1,@$array2){
  13.                 $count{$element}++;  ##请问%count的值是怎么赋的?为什么%count有10个数据项?
  14.         }
  15.         foreach my $element (keys %count){
  16.             print my @b = keys %count;
  17.             print "\n";
  18.             print my @a = values %count;
  19.             print "\n";
  20.                 push @array3,$element if( $count{$element} == 1 );
  21.         }
  22.         return sort @array3;
  23. }
复制代码
输出结果:

63792814105
2211111212
63792814105
2211111212
63792814105
2211111212
63792814105
2211111212
63792814105
2211111212
63792814105
2211111212
63792814105
2211111212
63792814105
2211111212
63792814105
2211111212
63792814105
2211111212
1
10
2
7
8
9

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
2 [报告]
发表于 2010-07-22 15:13 |只看该作者
(@$array1,@$array2)有10个不同的数值,%count就有10个主键

论坛徽章:
0
3 [报告]
发表于 2010-07-22 15:15 |只看该作者
$count{$element}++;  

遍历@a和@b的元素,并插到%count这个HASH中,如果KEY相同的,就+1。
也就是说,在%count中的VALUE是2的就是@a和@b的相同的元素,不同的就是1.

论坛徽章:
0
4 [报告]
发表于 2010-07-22 15:16 |只看该作者
(@$array1,@$array2)有10个不同的数值,%count就有10个主键
yybmsrs 发表于 2010-07-22 15:13


还想请教一下这段 $count{$element}++; 不理解

论坛徽章:
0
5 [报告]
发表于 2010-07-22 15:18 |只看该作者
$count{$element}++;  

遍历@a和@b的元素,并插到%count这个HASH中,如果KEY相同的,就+1。
也就是说, ...
toniz 发表于 2010-07-22 15:15



谢谢~这是个简写么 有没有笨点儿的写法

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
6 [报告]
发表于 2010-07-22 15:20 |只看该作者
这个不是什么简写吧,就是这么用的

论坛徽章:
0
7 [报告]
发表于 2010-07-22 15:27 |只看该作者
  1. if(!exists $count{$element} ){         
  2. $count{$element}=1;
  3. }     
  4. else{      
  5. $count{$element}=$count{$element}+1;
  6. }

复制代码

论坛徽章:
0
8 [报告]
发表于 2010-07-22 15:30 |只看该作者
#   foreach my $element(@$array1,@$array2){
#                 $count{$element}++;  ##请问%count的值是怎么赋的?为什么%count有10个数据项?
#         }
关于这句能不能再解释清楚点?

论坛徽章:
0
9 [报告]
发表于 2010-07-22 15:32 |只看该作者
toniz 发表于 2010-07-22 15:27


谢谢~理解了 这个++好灵活啊

论坛徽章:
0
10 [报告]
发表于 2010-07-25 01:34 |只看该作者
转化为hash吧·
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP