1

假设我有一个可能重复的字符串列表。我正在尝试查找该列表的排序索引列表,该列表包含字符串列表中的唯一条目。

例如给定:

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

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

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

但是,我想知道 Perl 中是否还有其他内置函数、函数或数据结构可以促进这项任务,并且可能避免在循环中编写它。

4

1 回答 1

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]
于 2012-09-16T19:21:47.357 回答