bol*_*bol 4 arrays perl perl-hash perl-data-structures
我正在尝试创建一个独特的数组,无论其原始顺序如何,并且不使用任何模块,这是我到目前为止所提出的:
my @arr = qw(b a a c d g e f);
my %hash;
@hash{@arr}=();
say keys %hash;
Run Code Online (Sandbox Code Playgroud)
是.由于散列键是唯一的,因此这是一种惯用的方法.完成同样事情的方法有很多种.
您还可以使用模块,例如List :: MoreUtils
use strict;
use warnings;
use List::MoreUtils qw(uniq);
print join ":", uniq qw(a a a b b c d);
Run Code Online (Sandbox Code Playgroud)
输出:
a:b:c:d
Run Code Online (Sandbox Code Playgroud)
重复数据删除的一些不同方法:
my @arr = keys { map { $_ => 1 } qw(b a a c d g e f) };
Run Code Online (Sandbox Code Playgroud)
花括号创建一个匿名哈希keys,map语句创建一个键/值对列表.
my @arr = dedupe(qw(a a b c d d e));
sub dedupe {
my %hash = map { $_ => 1 } @_;
return keys %hash;
}
Run Code Online (Sandbox Code Playgroud)
同样的事情,但在子程序形式,并分成两行.请注意,两个列表将按半随机顺序排列,因为哈希值是无序的.
使用的子程序List::MoreUtils同样简单,也许更可取,因为它将保留参数的顺序.但它仍然使用哈希.
sub uniq {
my %seen = ();
grep { not $seen{$_}++ } @_;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |