加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数组 – Perl:这是创建唯一数组的正确方法吗?

发布时间:2020-12-15 23:22:14 所属栏目:大数据 来源:网络整理
导读:我正在尝试创建一个独特的数组,无论其原始顺序如何,并且不使用任何模块,这是我到目前为止所提出的: my @arr = qw(b a a c d g e f);my %hash;@hash{@arr}=();say keys %hash; 解决方法 是.由于散列键是唯一的,因此这是一种惯用的方法.完成同样事情的方法有
我正在尝试创建一个独特的数组,无论其原始顺序如何,并且不使用任何模块,这是我到目前为止所提出的:

my @arr = qw(b a a c d g e f);
my %hash;
@hash{@arr}=();
say keys %hash;

解决方法

是.由于散列键是唯一的,因此这是一种惯用的方法.完成同样事情的方法有很多种.

您也可以使用模块,例如List::MoreUtils

use strict;
use warnings;

use List::MoreUtils qw(uniq);
print join ":",uniq qw(a a a b b c d);

输出:

a:b:c:d

重复数据删除的一些不同方法:

my @arr = keys { map { $_ => 1 } qw(b a a c d g e f) };

花括号为键创建一个匿名哈希,map语句创建一个键/值对列表.

my @arr = dedupe(qw(a a b c d d e));

sub dedupe {
    my %hash = map { $_ => 1 } @_;
    return keys %hash;
}

同样的事情,但在子程序形式,并分成两行.请注意,两个列表将按半随机顺序排列,因为哈希值是无序的.

List :: MoreUtils使用的子程序同样简单,也许更可取,因为它将保留参数的顺序.但它仍然使用哈希.

sub uniq {
    my %seen = ();
    grep { not $seen{$_}++ } @_;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读