Arrays 如何确定Perl 6数组中是否存在元素

Arrays 如何确定Perl 6数组中是否存在元素,arrays,list,containers,raku,Arrays,List,Containers,Raku,我以为在互联网上的某个地方会有一个简单的答案,但似乎我很难找到解决方案。首先,我想知道是否有一个简单的方法或函数: e、 g.~~或来自Perl 5的数组.contains() 了解Perl 6中有多少种实现此结果的不同方法也很好,因为考虑到问题的情况,有些方法可能比其他方法更好。另一种方法是: my @a = <foo bar buzz>; say so 'bar' ∈ @a; say so @a ∋ 'buzz'; # OUTPUT«True␤True␤» my@a=; 如果“

我以为在互联网上的某个地方会有一个简单的答案,但似乎我很难找到解决方案。首先,我想知道是否有一个简单的方法或函数:

e、 g.
~~
或来自Perl 5的
数组.contains()


了解Perl 6中有多少种实现此结果的不同方法也很好,因为考虑到问题的情况,有些方法可能比其他方法更好。

另一种方法是:

my @a = <foo bar buzz>;
say so 'bar' ∈ @a;
say so @a ∋ 'buzz';
# OUTPUT«True␤True␤»
my@a=;
如果“bar”eq有(@a){
说“是”;
}
#输出«是␤»
sub-first
返回匹配的元素或
Nil
Nil
是一个假值,意味着您可以在
Bool
上下文中使用结果来确定数组是否包含匹配的元素

my @a = 'A'..'Z';
say 'We got it' if @a.first('Z');
say 'We didn\'t get it' if !@a.first(1);
sub-first
有几个副词可以改变结果。例如,要返回索引而不是元素,可以使用
:k
副词。在本例中,我们还将结果主题化,以便在
if
语句中使用:

my @a = 'A'..'Z';
if @a.first('Q', :k) -> $index {
    say $index;
}

请注意,将阵列作为一个集合使用会带来巨大的性能影响,尤其是在重复使用阵列时。在这种情况下,您确实需要执行类似于
my$s=@a.Set在循环外,执行
$elem∈ $s
在循环中。您可以使用
$elem~~any@array
<代码>任意
创建元素的连接。
my @a = 'A'..'Z';
if @a.first('Q', :k) -> $index {
    say $index;
}