免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: cecial
打印 上一主题 下一主题

ARRAY操作 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2012-03-30 17:27 |只看该作者
jason680 发表于 2012-03-30 16:53
回复 17# cecial

>>这是从实际需求出发。


呵呵,我的需求就是不用去考虑元素的顺序啊。

论坛徽章:
0
22 [报告]
发表于 2012-03-31 10:28 |只看该作者
cecial 发表于 2012-03-30 17:27
呵呵,我的需求就是不用去考虑元素的顺序啊。
其实论坛里N多这种需求的帖子了,你搜搜看。另外,perl cookbook上也有很多实例。
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Data::Dumper;

  5. my @a = qw(a b c d e f);
  6. my @b = qw(v d c a f n);

  7. my %m;
  8. $m{$_}++ for @a,@b;

  9. my (@same,@diff,@union);
  10. while (my($k,$v) = each %m) {
  11.         push @union,$k;
  12.         push @same, $k if $v > 1;
  13.         push @diff, $k if $v == 1;
  14. }

  15. print Dumper \@union;
  16. print Dumper \@same;
  17. print Dumper \@diff;
复制代码

论坛徽章:
0
23 [报告]
发表于 2012-03-31 11:58 |只看该作者
回复 22# kk861123
谢谢!
我的重点不是怎么实现,而是怎么最简练的实现。
另外,两个array 的diff,我想得到的是两个另外的array,各自存放属于原来array的元素,不是一整个。


   

论坛徽章:
0
24 [报告]
发表于 2012-03-31 21:17 |只看该作者
cecial 发表于 2012-03-31 11:58
回复 22# kk861123
谢谢!
我的重点不是怎么实现,而是怎么最简练的实现。
好的。
  1. sub common {
  2.         my %m;
  3.         return [ grep { $m{$_}++ == 1 } @{$_[0]},@{$_[1]} ];
  4. }
  5. sub diff {
  6.         my %m;
  7.         $m{$_}++ for @{$_[0]},@{$_[1]};
  8.         return [ grep { $m{$_} == 1 } @{$_[0]}],[ grep { $m{$_} == 1 } @{$_[1]}];
  9. }
  10. sub uniq {
  11.         my %m;
  12.         return [ grep { $m{$_}++ != 1 } @{$_[0]},@{$_[1]} ];
  13. }
复制代码

论坛徽章:
0
25 [报告]
发表于 2012-03-31 22:06 |只看该作者
回复 24# kk861123


    看不懂,求解释,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP