我原以为在互联网上能够找到一个简单的答案,但是似乎我很难找到解决方案。首先我想知道是否有一个简单的方法或函数可以实现这个功能:
例如:Perl 5中的~~
或array.contains()
此外,了解在Perl 6中有多少种不同的方法来实现此结果也是有帮助的,因为在问题情况下,有些方法可能比其他方法更好。
我原以为在互联网上能够找到一个简单的答案,但是似乎我很难找到解决方案。首先我想知道是否有一个简单的方法或函数可以实现这个功能:
例如:Perl 5中的~~
或array.contains()
此外,了解在Perl 6中有多少种不同的方法来实现此结果也是有帮助的,因为在问题情况下,有些方法可能比其他方法更好。
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)»
my $s = @a.Set;
的操作,并在循环中执行 $elem ∈ $s
。 - mscha另一种方法是:
my @a = <foo bar buzz>;
if 'bar' eq any(@a) {
say "yes";
}
# OUTPUT«yes»
Sub first 文档。 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;
}
$elem ~~ any @array
。any
创建了元素的联合。 - J Hall