如何检查字符串是否多次出现在数组中?

时间:2015-03-31 00:24:40

标签: arrays perl data-structures match

我想检查一个字符串是否多次出现在数组中。我找到了一种方法,但它需要从CPAN安装一些东西。我没有root访问权限可以安装有问题的CPAN模块,所以我更愿意在不使用CPAN的情况下执行此操作。

3 个答案:

答案 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 ) {
    ...
}