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

How to determine if an element exists in a Perl 6 array

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

例如~~array.contains() 来自 Perl 5

如果知道在 Perl 6 中有多少种不同的方法可以达到这个结果也很好,因为考虑到问题的情况,有些方法可能比其他方法更好。

my @a = <foo bar buzz>;
say so 'bar' ∈ @a;
say so @a ∋ 'buzz';
# OUTPUT«True␤True␤»

http://doc.perl6.org/language/setbagmix and defined in https://github.com/rakudo/rakudo/blob/nom/src/core/set_operators.pm 中所述。

我相信 Set 检查等效性,如果您需要标识,则必须遍历数组并 === 它。

您可以将 Array 变成 Set 并使用下标。

say @a.Set{'bar'};
# OUTPUT«True␤»
say @a.Set<bar buzz>;
# OUTPUT«(True True)␤»

另一种方法是:

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

Sub first documentation. sub first return 匹配元素或 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 有几个副词可以改变结果。例如,对于 return 索引而不是元素,可以使用 :k 副词。在此示例中,我们还将结果主题化以在 if 语句中使用:

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