Bir listede eleman olup olmadığını kontrol edin


87

Listede bir dizge olup olmadığını kontrol etmem ve buna göre bir boole kabul eden bir işlevi çağırmam gerekiyor.

Bunu tek astar ile başarmak mümkün mü?

Aşağıdaki kod alabildiğim en iyisidir:

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

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

Eminim bunu daha az kodlamayla yapmak mümkün, ama nasıl yapılacağını bilmiyorum!

Yanıtlar:



33

Ve katı eşitliği kullanmak istemediyseniz, var olanı kullanabilirsiniz:


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

14

Daha da kolay!

strings contains myString

4
Bunun kabul edilen cevaptan farkı nedir?
Alper t. Türker

2
Temelde aynıdır ancak farklılıklar şunlardır: 1. Daha az parantez 2. Daha az nokta 3. myFunction'a referans yok 4. daha fazla beyaz boşluk. Genel olarak; Cevabım = 25 karakter - Kabul edilen cevap = 38 karakter
Taylrl

Bu retorik bir soruydu;) Size bir bağlam vermek için buraya LQP'den aldım . Silmeyi önermedim, ancak geç cevap verirseniz ek bir değer sağlamayı deneyin. Biraz sözdizimsel şeker, öyle hissettirmiyor, biliyorsun. Sadece söylüyorum ...
Alper t. Türker

3
Sorun yok. Anlıyorum. Artan sadeliği göstererek değer kattığını düşünüyorum. Yine de teşekkürler :)
Taylrl

3

bu aynı zamanda farklı yüklemlerle de çalışmalıdır

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

3
Find ile birlikte isDefined
Ciaran0

2

Sizin durumunuzda, yalnızca benzersiz değerlere sahip olduğunuzdan emin olmak için List'i değil Set'i kullanmayı düşünürdüm. bazen kopyaları eklemeniz gerekmedikçe.

Bu durumda, listelerin etrafına herhangi bir sarmalayıcı işlevi eklemeniz gerekmez.


-3

İle de bir containsyöntem uygulayabilirsiniz foldLeft, bu oldukça harika. Sadece foldLeft algoritmalarını seviyorum.

Örneğin:

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)
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.