+ -
当前位置:首页 → 问答吧 → 只显示出现两次的元素的疑问

只显示出现两次的元素的疑问

时间:2011-02-11

来源:互联网

@crops = qw(wheat corn barley rice corn soybean hay
            alfalfa rice hay beets corn hay);
@duplicates = grep { $count{$_} == 2 }
              grep { ++$count{$_} >; 1 } @crops;
print "@duplicatesn";
这个只显示出现两次的元素,为什么出现3次以及3次以上的不显示?
比如corn,当第二次出现时候 $count{$_} == 2也成立,为什么它就不显示?

作者: baoyu05   发布时间: 2011-02-11

grep { ++$count{$_} > 1 } @crops; 循环完返回个列表,然后外面的 grep 才开始执行

作者: zhlong8   发布时间: 2011-02-11



QUOTE:
grep { ++$count{$_} > 1 } @crops; 循环完返回个列表,然后外面的 grep 才开始执行
zhlong8 发表于 2011-02-11 13:56



那用一个grep 为什么不行?反正循环完了才会保存结果
    grep { $count{$_}++ == 2 } @crops

作者: baoyu05   发布时间: 2011-02-11



QUOTE:
那用一个grep 为什么不行?反正循环完了才会保存结果
    grep { $count{$_}++ == 2 } @crops
baoyu05 发表于 2011-02-11 14:03




    要获取出现次数的信息至少要循环一次吧,然后过滤还要再循环一次

作者: zhlong8   发布时间: 2011-02-11

本帖最后由 zhlong8 于 2011-02-11 14:12 编辑

如果不嫌麻烦超过2次的可以在 hash 中 delete 下,这样也只用循环一次,出现两次的都在 keys %hash 中了

sorry, 我搞错了……

作者: zhlong8   发布时间: 2011-02-11



QUOTE:
如果不嫌麻烦超过2次的可以在 hash 中 delete 下,这样也只用循环一次,出现两次的都在 keys %hash 中了

...
zhlong8 发表于 2011-02-11 14:09




    grep { $count{$_}++ == 2 } @crops
这个不是循环的同时在判断吗?

作者: baoyu05   发布时间: 2011-02-11



QUOTE:
grep { $count{$_}++ == 2 } @crops
这个不是循环的同时在判断吗?
baoyu05 发表于 2011-02-11 14:18




    你这个是出现至少3次就会返回的,包括4,5,6 。。。

作者: zhlong8   发布时间: 2011-02-11



QUOTE:
你这个是出现至少3次就会返回的,包括4,5,6 。。。
zhlong8 发表于 2011-02-11 14:25




     $count{$_}++ 是有可能4,5,6但是它不==2,就不会保存到数组了。那结果为什么不对呢

作者: baoyu05   发布时间: 2011-02-11



QUOTE:
$count{$_}++ 是有可能4,5,6但是它不==2,就不会保存到数组了。那结果为什么不对呢
baoyu05 发表于 2011-02-11 14:34




    知道 grep 干嘛的吗? 第三次遇到表达式就是真,相应的值就返回了,等发现第 4,5,6... 你后悔已经来不及啦

perldoc -f grep

作者: zhlong8   发布时间: 2011-02-11



QUOTE:
知道 grep 干嘛的吗? 第三次遇到表达式就是真,相应的值就返回了,等发现第 4,5,6... 你后悔已经 ...
zhlong8 发表于 2011-02-11 14:37




    不是说循环完了才返回列表吗(二楼)

作者: baoyu05   发布时间: 2011-02-11



QUOTE:
不是说循环完了才返回列表吗(二楼)
baoyu05 发表于 2011-02-11 14:40




    你先了解下 grep 是怎么工作的,我没说错话应该

作者: zhlong8   发布时间: 2011-02-11



QUOTE:
你先了解下 grep 是怎么工作的,我没说错话应该
zhlong8 发表于 2011-02-11 14:51




   

作者: baoyu05   发布时间: 2011-02-11