gpt4 book ai didi

arrays - 如何在 Perl 中检查两个数组是否包含相同的元素?

转载 作者:行者123 更新时间:2023-12-03 15:24:19 28 4
gpt4 key购买 nike

所以我需要的是一种简单的方法来判断两个数组在 perl 中是否相同。顺序无关紧要,所以我正在寻找这样的东西:
my @a = (1, 2, 3);my @b = (2, 3, 1);my @c = (1, 2, 4);&identical(@a, @b)返回 1
&identical(@a, @c)返回 0

谢谢!

最佳答案

您可以在散列中计算元素的计数。有一个 (element => count) 散列,每次第一个数组有该元素时增加计数,每次另一个数组有它时减少计数(反之亦然)。如果两个数组都具有相同的元素,则散列中的每个值都将为 0。

sub have_same_elements {
my ($arr1, $arr2) = @_;
my %counts = ();
$counts{$_} += 1 foreach (@$arr1);
$counts{$_} -= 1 foreach (@$arr2);
return !(grep { $_ != 0 } values %counts);
}


$a_and_b_same = have_same_elements(\@a, \@b); # will be true
$a_and_c_same = have_same_elements(\@a, \@c); # will be false

(请注意,这可能适用于自己进行字符串化的对象,也可能不适用。哈希键不能是引用,因此 Perl 在您使用它们时将引用字符串化。它的默认字符串化器将引用转换为类似 ARRAY(0x12345678) 的东西,这使得引用不同,除非它们'是同一个东西。但是如果一个对象进行自己的字符串化并且不为不同的引用返回不同的字符串,这可能会中断。只是让你知道。)

关于arrays - 如何在 Perl 中检查两个数组是否包含相同的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127262/

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