在上午工作的时候遇到一个问题,有两个列表A和B,分别都是无重复元素的列表。B中的元素A中有可能也包含,现在需要把A,B两个列表都包含的元素从A中删除。查看了一下手册,没有直接这样的函数或者方法,而且perl的列表操作这块提供库函数没有Erlang那么多,这就需要我们自己想办法。

最后的想到一个简单可靠的办法,先由A构建一个散列,利用散列key的唯一性,然后在通过 delete %hash{key} (key为B的元素)把有可能共同包含的元素删除,最后再由keys函数生成满足要求的列表。
我这边的一种实现方法:
 
  1. my %hash; 
  2.     grep(!$hash{$_}++, @A); 
  3.     while(<@B>){ 
  4.     # 包含就删除,不包含就不处理 
  5.         delete $hash{$_}; 
  6.     } 
  7.     # @A现在就是可以删除的玩家id列表 
  8.     @A = keys %hash; 
  网络上还有很多方案,千奇百怪都有。通过这个实际问题,我看到perl解决问题思想就是“可以通过很多方法解决同一个问题”。