2016-02-16 6 views
12

インターネット上のどこかで簡単な答えがあると思っていましたが、解決策を見つけるのが難しいようです。私はまず、このための簡単な方法や機能があるかどうか疑問に思っています。要素がPerl 6の配列に存在するかどうかを調べる方法

~~またはarray.contains() Perl 5の

からまた、いくつかの問題の状況を与えられ、他のものより良いかもしれないとして、Perl 6の中にありますどのように多く、この結果を達成するためのさまざまな方法を知っていいだろう。

+0

'$ elem ~~ any @ array'を使用できます。 'any'は要素の接合を作成します。 –

答えて

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

http://doc.perl6.org/language/setbagmixで文書化し、https://github.com/rakudo/rakudo/blob/nom/src/core/set_operators.pmで定義されているように。

私はSetが同等かどうかを確認します。アイデンティティが必要な場合は、配列をループして===をループする必要があります。

ArraySetに変更し、添字を使用できます。これを行うには

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

アレイをセットとして使用した場合、特に繰り返して使用する場合、パフォーマンスが大幅に向上することに注意してください。その場合、ループの外側で 'my $ s = @ a.Set;'のようなことを本当に行う必要があり、ループ内で '$ elem∈$ s'を実行する必要があります。 – mscha

8

もう一つの方法は、次のとおりです。

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

Sub first documentation.一致する要素またはNilを返しsub firstNilは、Boolコンテキストの結果を使用して、配列に一致する要素が含まれているかどうかを判断することを意味する偽の値です。

my @a = 'A'..'Z'; 
say 'We got it' if @a.first('Z'); 
say 'We didn\'t get it' if [email protected](1); 

結果を変更sub firstには、いくつかの副詞があります。たとえば、要素の代わりにインデックスを返す場合は、:kという副詞を使用することができます。この例では、ifステートメント内で使用する結果をトピック化します。

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