2016-02-16 8 views
12

में मौजूद है या नहीं, मैंने सोचा कि इंटरनेट पर कहीं भी इसका कोई आसान जवाब नहीं होगा लेकिन ऐसा लगता है कि मुझे समाधान खोजने में परेशानी हो रही है। मैं सबसे पहले सोच रहा हूं कि इसके लिए कोई आसान तरीका या कार्य है:यह निर्धारित करने के लिए कि कोई तत्व पर्ल 6 सरणी

उदा। ~~ या array.contains() पर्ल 5

से यह भी पता है कि कैसे कई इस परिणाम को प्राप्त करने के विभिन्न तरीकों वहाँ पर्ल 6 में हैं के रूप में कुछ समस्या की स्थिति को देखते हुए दूसरों की तुलना में बेहतर हो सकता है अच्छा होगा।

+0

आप '$ ELEM ~~ किसी भी @ array' उपयोग कर सकते हैं। 'कोई भी तत्व तत्वों का एक जंक्शन बनाता है। –

उत्तर

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 समकक्षता के लिए जांच करता है, अगर आपको पहचान की आवश्यकता है तो आपको सरणी और === पर लूप करना होगा।

आप Array को Set पर बदल सकते हैं और सदस्यता का उपयोग कर सकते हैं।

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

ध्यान दें कि एक सरणी को सेट के रूप में उपयोग करने के लिए बड़े प्रदर्शन के परिणाम हैं, खासकर जब बार-बार ऐसा करते हैं। उस स्थिति में, आपको लूप के बाहर 'my $ s = @ a.Set;' जैसी कुछ करने की ज़रूरत है, और लूप में '$ elem ∈ $ s' करें। – mscha

8

यह करने के लिए एक और तरीका है, है। Nil एक झूठा मान है जिसका अर्थ है कि आप 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 adverb का उपयोग करें। इस उदाहरण में हम भी if बयान भीतर उपयोग के लिए परिणाम topicalize:

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

Sub first documentation.sub first रिटर्न मिलान तत्व या Nil:

say @a.Set{'bar'}; 
# OUTPUT«True␤» 
say @a.Set<bar buzz>; 
# OUTPUT«(True True)␤» 
संबंधित मुद्दे