gpt4 book ai didi

perl - 如何避免数组中的重复值?

转载 作者:行者123 更新时间:2023-12-02 00:29:14 25 4
gpt4 key购买 nike

我知道如何避免一维数组中的重复。

但是,我有一个数组数组,其中的两行可能包含具有不同引用但值相同的数组。我试过这个:

sub unique {
my %seen;
grep !$seen{join('',$_)}++, @_
}

my @aa = ( ["1","2","3"],["1","2","3"],["1","2","4"] );
my @bb = unique(@aa);
print $_ for (@bb);

它应该删除两个“123”数组之一,但事实并非如此。可能是因为 $_ 保存的是引用而不是可以连接的数组?当然,我可以循环遍历 $_ 引用的数组并连接所有值,然后将其用作 %seen 哈希的键。

但我怀疑 Perl 中有一个我还不知道的非常优雅的解决方案......

最佳答案

要修复您的幼稚方法,您应该在两个位置取消引用数组引用:序列化时和打印时:

# Assumes the elements don't contain the value of $; (0x1C by default)
sub unique {
my %seen;
grep ! $seen{ join $;, @$_ }++, @_
}

my @aa = ( ["1","2","3"],["1","2","3"],["1","2","4"] );
my @bb = unique(@aa);
print "@$_\n" for (@bb);

这仍然可能给出错误的输出,想象一下[ "1\x{1C}2", 3 ]。如果您的数据可能包含此类字符串,则需要更复杂的字符串化。幸运的是,Perl 已经有一种序列化数组引用的方法: Data::Dumper :

use Data::Dumper;

sub unique {
my %seen;
grep ! $seen{ Dumper $_ }++, @_
}

关于perl - 如何避免数组中的重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25665112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com