यदि तत्व सूची में मौजूद है, तो स्केला जाँच करें


86

मुझे यह जांचने की आवश्यकता है कि क्या कोई स्ट्रिंग सूची में मौजूद है, और एक फ़ंक्शन को कॉल करता है जो तदनुसार एक बूलियन को स्वीकार करता है।

क्या एक लाइनर के साथ इसे हासिल करना संभव है?

नीचे दिया गया कोड सबसे अच्छा है जो मुझे मिल सकता है:

val strings = List("a", "b", "c")
val myString = "a"

strings.find(x=>x == myString) match {
  case Some(_) => myFunction(true)
  case None => myFunction(false)
}

मुझे यकीन है कि कम कोडिंग के साथ ऐसा करना संभव है, लेकिन मुझे नहीं पता कि कैसे!

जवाबों:


124

महज प्रयोग करें contains

myFunction(strings.contains(myString))

3
क्या होगा अगर मैं एक स्ट्रिंग के साथ सौदा नहीं करता हूं, लेकिन मुझे यह जांचने की आवश्यकता है कि क्या मूल्य कई संभावित मैचों में से एक है?
तूतुका 19


32

और यदि आप सख्त समानता का उपयोग नहीं करना चाहते हैं, तो आप मौजूद हो सकते हैं:


myFunction(strings.exists { x => customPredicate(x) })

14

और भी आसान!

strings contains myString

4
वह कैसे स्वीकृत उत्तर से अलग है ?
एलपर टी। तुर्क

2
यह मौलिक रूप से समान है लेकिन अंतर इस प्रकार हैं: 1. कुछ कोष्ठक 2. कम अवधि 3. मायफ़ंक्शन का कोई संदर्भ नहीं 4. अधिक श्वेत स्थान। कुल मिलाकर; मेरा उत्तर = 25 वर्ण बनाम स्वीकृत उत्तर = 38 अक्षर
14

यह एक लफ्फाजी का सवाल था;) आपको एक संदर्भ देने के लिए मैं यहां एलक्यूपी से मिला । मैंने विलोपन की अनुशंसा नहीं की थी, लेकिन यदि आप देर से उत्तर पोस्ट करते हैं, तो कुछ अतिरिक्त मूल्य प्रदान करने का प्रयास करें। थोड़ी सी सिटैक्टिक शुगर यह ऐसा महसूस नहीं होता है, आप जानते हैं। बस कह रहा हूं ...
अल्पर टी। Turker

3
कोई समस्या नहीं। मै समझता हुँ। मुझे लगता है कि यह बढ़ी हुई सादगी दिखाकर मूल्य जोड़ता है। वैसे भी धन्यवाद :)
टेलर २२'१ though

3

यह अलग-अलग विधेय के साथ भी काम करना चाहिए

myFunction(strings.find( _ == mystring ).isDefined)

3
आप का उपयोग कर सकते हैं बजाय isDefined
Ciaran0

2

आपके मामले में मैं सेट और लिस्ट का उपयोग करने पर विचार करूंगा, यह सुनिश्चित करने के लिए कि आपके पास केवल विशिष्ट मूल्य हैं। जब तक आपको कभी-कभी डुप्लिकेट शामिल करने की आवश्यकता न हो।

इस स्थिति में, आपको सूचियों के आसपास कोई आवरण कार्य करने की आवश्यकता नहीं है।


-3

तुम भी एक containsविधि के साथ लागू कर सकते हैं foldLeft, यह बहुत बढ़िया है। मुझे सिर्फ फोल्डेफ्ट एल्गोरिदम पसंद हैं।

उदाहरण के लिए:

object ContainsWithFoldLeft extends App {

  val list = (0 to 10).toList
  println(contains(list, 10)) //true
  println(contains(list, 11)) //false

  def contains[A](list: List[A], item: A): Boolean = {
    list.foldLeft(false)((r, c) => c.equals(item) || r)
  }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.