Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33498
  • 博文数量: 14
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-09 09:40
文章分类

全部博文(14)

文章存档

2011年(1)

2008年(13)

我的朋友
最近访客

分类:

2008-07-11 12:52:54

my @ori=qw(1 2 3 4 51 45 66);
my @aft=grep $_=~/1$/ ;
 
把@ori数组里的每个元素放到表达式里测试,返回true就放到@aft
等价于
my @aft;
foreach(@ori) {
        if($_=~/1$/) {
                push @aft,$_;
        }
}
 
所以grep操作后的返回数组的长度有可能比原数组短
my @ori=qw(1 2 3 4 51 45 66);
my @aft=map $_+1 ;
 
相当于
my @aft;
foreach(@ori) {
        push @aft, $_+1;
}
 
所以map操作不改变数组长度
 
以下是我的总结:
1.grep的第一个参数无论是表达式还是子函数,最后返回值一律按boolean处理
2.map的第一个参数无论是表达式还是子函数,最后返回值一律按变量处理,这个变量可以是标量,可以是数组,可以是其他的数据结构
3.grep和map的返回值绝对是数组类型。至于用在什么场合就变成了相应的类型
 
 
阅读(880) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~