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