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

15

我原以为在互联网上能够找到一个简单的答案,但是似乎我很难找到解决方案。首先我想知道是否有一个简单的方法或函数可以实现这个功能:

例如:Perl 5中的~~array.contains()

此外,了解在Perl 6中有多少种不同的方法来实现此结果也是有帮助的,因为在问题情况下,有些方法可能比其他方法更好。


你可以使用 $elem ~~ any @arrayany 创建了元素的联合。 - J Hall
3个回答

14

请注意,将数组用作集合会产生巨大的性能影响,特别是在重复使用时。在这种情况下,您真的需要在循环外执行类似于 my $s = @a.Set; 的操作,并在循环中执行 $elem ∈ $s - mscha

11

另一种方法是:

my @a = <foo bar buzz>;
if 'bar' eq any(@a) {
    say "yes";
}
# OUTPUT«yes␤»

5

Sub first 文档。 sub first 返回匹配的元素或者NilNil 是一个假值,这意味着您可以在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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接