我想检查一个字符串是否多次出现在数组中。我找到了一种方法,但它需要从CPAN安装一些东西。我没有root访问权限可以安装有问题的CPAN模块,所以我更愿意在不使用CPAN的情况下执行此操作。
答案 0 :(得分:1)
my $count = grep $_ eq $word, @array;
请参阅perldoc -f grep。
为LIST的每个元素(每个元素本地设置
$_
)计算BLOCK或EXPR,并返回由表达式求值为true的元素组成的列表值。在标量上下文中,返回表达式为真的次数。
答案 1 :(得分:1)
编辑:我认为您的“字符串”不一定是离散元素。要计算完全匹配的每个元素,请收紧匹配(即使用/^...$/
)或使用eq
,如Sinan在评论中指出的那样。
您可以计算grep
匹配数组中字符串的次数:
my @animals = qw/duck goose camel squirrel camel camelback/ ;
if ( scalar ( grep { /^camel$/ } @animals ) > 1 ) {
print "more than one" ;
}
缩短形式:
say "more" if (grep /^camel$/, @animals ) > 1 ;
say ~~( grep /^camel$/, @animal );
“~~
”是此处“scalar
”的缩写。
答案 2 :(得分:1)
在Stack Overflow上寻求帮助时,通常希望您为我们显示一些代码来帮助您使用。这不是在Perl编程中获得速成课程的地方。
处理此问题的最通用方法是构建一个哈希,其键是列表中的所有不同值,值是项发生的次数。该程序正是为了找到多次出现的值
use strict;
use warnings;
use 5.010;
my @animals = qw/ duck goose camel squirrel camel /;
my %counts;
++$counts{$_} for @animals;
say for grep $counts{$_} > 1, keys %counts;
<强>输出强>
camel
或者,如果您有一个特定的值要检查它是否多次出现,您可以直接查询哈希
if ( $counts{goose} > 1 ) {
...
}