Perl 数组唯一元素

Perl array unique elements

我有一个如下所示的 perl 数组,我必须提取该数组的唯一元素。有没有简单的方法可以做到这一点?

Perl> print(Dumper(@uncurled_data))
$VAR1 = '100 200';
$VAR2 = '100 200';
$VAR3 = '300 400';
$VAR4 = '100 200';
$VAR5 = '100 200';
$VAR6 = '300 400';
$VAR7 = '300 400';
$VAR8 = '300 400';

当我执行此操作时,keys { map { (split /\ /, $_)[0] => 1 } @uncurled_data },我必须执行两次,即对数组中的每个元素执行一次。有什么 one/liner 或简单的方法可以做到这一点吗?

包含 4 个元素的所需输出数组 100, 200, 300, 400

首先创建一个列表,列出您想要使其独一无二的内容,

map { split } @uncurled_data

然后使用标准方法查找唯一项。

use List::Util qw( uniq );
my @uniq = uniq map { split } @uncurled_data;

my %seen;
my @uniq = grep { !$seen{$_}++ } map { split } @uncurled_data;

你也可以这样做:

my @uniq = sort keys %{+{map {$_ => 1;} map { split } @uncurled_data}};