Perl内置函数用于查找指向列表中唯一条目的索引列表

时间:2012-09-16 19:07:23

标签: perl built-in

说我有一个可能重复的字符串列表。我试图找到这个列表的排序索引列表,其中包含字符串列表中的唯一条目。

E.g。给出:

my @string_list = ("hello", "world", "hello", "how", "are", "world");

带有索引列表的输出将是:[0, 1, 3, 4],对应于单词"hello""world""how""are"

为此,我可以遍历输入列表并跟踪我在包含这些索引的字典中的列表中看到的元素,并稍后使用这些索引来获取唯一项目列表。

但是,我想知道Perl中是否有任何其他内置函数或函数或数据结构可以帮助完成此任务,并且可能避免在循环中编写它。

1 个答案:

答案 0 :(得分:2)

这种概念没有内置功能,因为它不是一般的想法。然而,它只是几行代码:

use strict;
use warnings;

my @string_list = qw( hello world hello how are world );

my @indices = do {
  my %seen;
  map { $seen{$string_list[$_]}++ ? () : ($_) } 0 .. $#string_list;
};

printf "[%s]\n", join ', ', @indices;

<强>输出

[0, 1, 3, 4]