perl的核心库中有个 List::Util 模块,在上一篇文章中我们已提及过。此外,在CPAN上还有一个更加高级的模块:List::MoreUtils(注意,是复数,后面有个s哦!)它可以看成是 List::Util 的强化版本,能更加方便地处理各种数组问题。这种模块在小驼书里面是不会讲的,在《Perl 最佳实践》这本书里面有所提及。
(1)删除数组中的重复元素
比如,一个数组是(1,6,5,0,6,2,0,7,7,8),现在要求:重复出现的元素只保留一个,其它删掉,并且数组顺序不变,结果应该是(1,6,5,0,2,7,8),该怎么做?
网上的做法基本上是基于 grep 版本的:
其实比这更加简单的做法是直接调用 List::MoreUtils 模块里面的 uniq 函数:
是不是很简单呢?!
(2)找出数组中某个元素所在的位置
继续上面那个数组(1,6,5,0,6,2,0,7,7,8),现在要找出元素 6 所在的位置(应该是第 1 和第 4 位,数组的第一个元素看成第 0 位)。方法是调用以下几个函数:
first_index:找出符合条件的第一个元素所在的位置
last_index:找出符合条件的最后一个元素所在的位置
indexes:找出符合条件的所有元素所在的位置,因为可能有很多个元素,所以它返回一个列表(哪怕其实只有一个元素符合条件)
它的写法是(以 first_index 为例):
可见这与 grep 和 map 函数很像!只不过 grep 和 map 返回的是数组的元素列表,而这里返回的是元素的索引(列表)罢了。
如果只想找到第一个出现 6 的位置,就这么写:
如果想找到所有出现 6 的位置,就这么写:
通过这种方法,我们可以很轻松地找到数组中最小值所在的位置