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

如何在Perl中检查数组的所有元素是否相同?

发布时间:2020-12-15 22:02:45 所属栏目:大数据 来源:网络整理
导读:我有一个数组@test.检查数组的每个元素是否是相同的字符串的最佳方式是什么? 我知道我可以用foreach循环来做,但是有没有更好的方法呢?我检查了地图功能,但我不知道这是我需要的. 解决方法 如果字符串已知,则可以在标量上下文中使用 grep : if (@test == g
我有一个数组@test.检查数组的每个元素是否是相同的字符串的最佳方式是什么?

我知道我可以用foreach循环来做,但是有没有更好的方法呢?我检查了地图功能,但我不知道这是我需要的.

解决方法

如果字符串已知,则可以在标量上下文中使用 grep
if (@test == grep { $_ eq $string } @test) {
 # all equal
}

否则,使用哈希:

my %string = map { $_,1 } @test;
if (keys %string == 1) {
 # all equal
}

或更短的版本:

if (keys %{{ map {$_,1} @test }} == 1) {
 # all equal
}

注意:当用作Perl中的字符串时,未定义的值的行为类似于空字符串(“”).因此,如果数组只包含空字符串和undefs,则检查将返回true.

这里有一个解决方案:

my $is_equal = 0;
my $string   = $test[0]; # the first element

for my $i (0..$#test) {
    last unless defined $string == defined $test[$i];
    last if defined $test[$i] && $test[$i] ne $string;
    $is_equal = 1 if $i == $#test;
}

(编辑:李大同)

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

    推荐文章
      热点阅读