2013-04-16 5 views
32

का हिस्सा है मैं इस तरह एक स्ट्रिंग है:पता चल सके कि सूची में मानों स्ट्रिंग

val a = "some random test message" 

मैं इस तरह एक सूची है: अब

val keys = List("hi","random","test") 

, मैं चाहे स्ट्रिंग a जाँच करना चाहते हैं keys से कोई भी मान शामिल है। स्कैला के निर्मित लाइब्रेरी फ़ंक्शंस का उपयोग करके हम इसे कैसे कर सकते हैं?

(मैं a बंटवारे सूची के रास्ता पता है और फिर keys सूची के साथ एक चेक और फिर समाधान खोजने के। लेकिन मैं इसे सुलझाने अधिक बस मानक पुस्तकालय कार्यों का उपयोग करने का एक तरीका है देख रहा हूँ।)

उत्तर

51

कुछ इस तरह?

keys.exists(a.contains(_)) 

या और भी अधिक मुहावरे

keys.exists(a.contains) 
+0

या 'कुंजी मौजूद हैं। Contains' – Eastsun

+2

ओपी की आवश्यकता के आधार पर, val keys = List("mess") जो झूठी सकारात्मक हो सकती है। keys.exists(a.split(' ').contains) अधिक सटीक हो सकता है। – nadavwr

+2

यह समाधान बहुत अच्छा है लेकिन मुझे इसे समझने में कठिनाई हो रही है। क्या आप लोग मेरी मदद कर सकते हैं? – KirdApe

7

सरल मामले रोकथाम सबस्ट्रिंग, उदा (के रूप में rarry के जवाब में टिप्पणी की) का परीक्षण करने के लिए है

keys.exists(a.contains(_)) 

आपने यह नहीं कहा कि आप वास्तव में इसके बजाय पूरे शब्द मिलान खोजना चाहते हैं या नहीं। चूंकि rarry का जवाब माना गया कि आपने नहीं किया है, तो यहां एक विकल्प है जो आपको लगता है।

val a = "some random test message" 
val words = a.split(" ") 
val keys = Set("hi","random","test") // could be a List (see below) 
words.exists(keys contains _) 

ध्यान रखें कि चाबियों का सूची छोटे सूचियों के लिए केवल कुशल है में भालू। एक सूची के साथ, contains विधि आमतौर पर पूरी सूची को रैखिक रूप से स्कैन करती है जब तक कि यह कोई मिलान न हो या अंत तक पहुंच जाए।

बड़ी संख्या में वस्तुओं के लिए, एक सेट न केवल बेहतर है, बल्कि जानकारी का एक और वास्तविक प्रतिनिधित्व भी है। सेट्स को आमतौर पर हैशकोड आदि के माध्यम से अनुकूलित किया जाता है और इसलिए कम रैखिक खोज की आवश्यकता होती है - या कोई भी नहीं।

+0

+1 ढूंढ रहे हैं! – Sibi

संबंधित मुद्दे