我认为在互联网上的某个地方会有一个简单的答案,但似乎我找不到解决方案。我首先想知道是否有一个简单的方法或功能:
e.g。来自Perl 5的~~
或array.contains()
在Perl 6中有多少不同的方法可以实现这一结果也很好,因为考虑到问题的情况,某些方法可能比其他方法更好。
答案 0 :(得分:13)
my @a = <foo bar buzz>;
say so 'bar' ∈ @a;
say so @a ∋ 'buzz';
# OUTPUT«TrueTrue»
如http://doc.perl6.org/language/setbagmix中所述并在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)»
答案 1 :(得分:11)
另一种方法是:
my @a = <foo bar buzz>;
if 'bar' eq any(@a) {
say "yes";
}
# OUTPUT«yes»
答案 2 :(得分:4)
Sub first documentation. 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;
}