Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在perl中搜索未排序的数组?_Arrays_Perl - Fatal编程技术网

Arrays 在perl中搜索未排序的数组?

Arrays 在perl中搜索未排序的数组?,arrays,perl,Arrays,Perl,我有一个数组。。。比如说100个元素。我想检查是否有任何元素与特定字符串匹配。例如: @数组=(‘红色’、‘白色’、‘蓝色’) 我还想知道数组是否包含字符串“white”作为元素之一。 我知道如何使用foreach循环并比较每个元素,但是。。。有没有比在整个阵列中循环更简单(更快)的方法 -谢谢它不会比循环更快,但您可以在Perl中使用 $ perl -e "@array = ('red','white','blue'); print grep(/^white$/, @array);" whit

我有一个数组。。。比如说100个元素。我想检查是否有任何元素与特定字符串匹配。例如:

@数组=(‘红色’、‘白色’、‘蓝色’)

我还想知道数组是否包含字符串“white”作为元素之一。 我知道如何使用foreach循环并比较每个元素,但是。。。有没有比在整个阵列中循环更简单(更快)的方法


-谢谢

它不会比循环更快,但您可以在Perl中使用

$ perl -e "@array = ('red','white','blue'); print grep(/^white$/, @array);"
white

您可以使用
grep
作为:

@array = ('red','white','blue');
$key = 'white';
if (grep { $_ eq $key } @array) {
        print $key.' found';
} 
Perl 5.10及更高版本:

对于5.10之前的版本:


这些短路-如果找到匹配项,则无需遍历整个数组。

如果要多次搜索数组,则值得为数组数据构建哈希表:

my %array_data = map { $array[$_] => $_ } 0..$#array;
my $search_term = 'white';
if (defined $array_data{$search_term}) {
    print "'$search_term' was found at array index $array_data{$search_term}\n";
}

这看起来很简单,我并不介意速度,但代码的简单性总是很好的-感谢您也发布了关于“grep”的帖子,同时也感谢您展示了我将如何在代码中使用它的示例。因为它是未排序的,您找到的任何方法都将涉及搜索整个数组,因此它不会比在其中循环快。请参阅:
use List::MoreUtils qw{any}; 
print "found" if any { 'white' eq $_ } @array;
my %array_data = map { $array[$_] => $_ } 0..$#array;
my $search_term = 'white';
if (defined $array_data{$search_term}) {
    print "'$search_term' was found at array index $array_data{$search_term}\n";
}