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}};
我有一个如下所示的 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}};