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

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

发布时间:2020-12-15 21:55:48 所属栏目:大数据 来源:网络整理
导读:所以我需要的是一个简单的方法来判断两个数组在perl中是否相同.顺序无关紧要,所以我正在寻找这样的东西: 我的@a =(1,2,3); 我的@b =(2,3,1); 我的@c =(1,4); 相同(@ a,@ b)返回1 相同(@ a,@ c)返回0 谢谢! 解决方法 你可以用散列计算元素的计数.有一个(ele
所以我需要的是一个简单的方法来判断两个数组在perl中是否相同.顺序无关紧要,所以我正在寻找这样的东西:

我的@a =(1,2,3);

我的@b =(2,3,1);

我的@c =(1,4);

&相同(@ a,@ b)返回1

&相同(@ 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)的引用,这使得引用除非它们是相同的东西.但如果一个对象做了自己的字符串化并且不为不同的引用返回不同的字符串,那么这可能会破坏.就这样你知道.)

(编辑:李大同)

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

    推荐文章
      热点阅读