+ -
当前位置:首页 → 问答吧 → 关于数组的交集和并集问题!

关于数组的交集和并集问题!

时间:2010-10-15

来源:互联网

正在看cookbook,相关代码如下:

#!/usr/bin/perl
@a=qw(1 2 3 4 5);
@b=qw(6 2 7 1 5 8 9);
for(@a,@b)
{         
  $m{$_}++ && $n{$_}++;
}      
@aa=keys %m;
@bb=keys %n;
print "@aa\n";
print "@bb\n";

结果如下:
6 3 7 9 2 8 1 4 5
1 2 5
正是数组的并集和交集。但是其中的 $m{$_}++ && $n{$_}++; 这条语名不理解它的用途,请达人们帮助解读一下。

作者: li_000828   发布时间: 2010-10-15

先说说看你是怎样理解的

作者: 珞水的大叔   发布时间: 2010-10-15

本帖最后由 li_000828 于 2010-10-15 14:33 编辑

回复 珞水的大叔


    我感觉应该是两个相同的关联数组,得到的都应该是两个相同的数组的并集,可能是我对 && 符号的理解还不透彻!

作者: li_000828   发布时间: 2010-10-15

回复 li_000828


你的感觉没错,呵呵
A && B
相当于
if(A != 0){B}
也就是说,如果A == 0,则B不执行

作者: 珞水的大叔   发布时间: 2010-10-15

回复 珞水的大叔


    如果我把上面的代码换成:
   $m{$_}++ ;
   $n{$_}++;
  
   结果肯定是两个相同的关联数组,而$m{$_}++ && $n{$_}++;为什么会得到不同的结果,还是不太理解?

作者: li_000828   发布时间: 2010-10-15

本帖最后由 珞水的大叔 于 2010-10-15 14:46 编辑

回复 li_000828
  1. $m{$_}++ && $n{$_}++
复制代码
相当于
  1. if($m{$_}++ != 0){
  2.     $n{$_}++;
  3. }
复制代码
相当于
  1. if($m{$_} != 0){
  2.     $n{$_}++;
  3. }
  4. $m{$_}++;
复制代码
这样说明白了么

又及:
判断 A && B 时
我们知道,如果A == 0,那么不管B是什么,A && B的值总为零
同样程序在做判断时,会先检查A,如果A为0,那么直接返回A && B的值为零,就不管B了

作者: 珞水的大叔   发布时间: 2010-10-15

回复 li_000828


    我仔细想了一下,终于理解了,多谢大叔!

作者: li_000828   发布时间: 2010-10-15

回复 li_000828


    加油

作者: 珞水的大叔   发布时间: 2010-10-15

一次是并,两次是交。这个有意思

作者: zhlong8   发布时间: 2010-10-15

学习了。真是不错 顶

作者: liyangole   发布时间: 2010-10-15