2013-01-10 30 views
51

Listede bir dizenin bulunup bulunmadığını kontrol etmem gerekiyor ve buna göre bir boole kabul eden bir işlevi çağırmam gerekiyor.Scala öğesinin bir listede mevcut olup olmadığını kontrol edin

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

Aşağıdaki kod ı alabilir en iyisi:

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

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

Bence daha az kodlama ile bunu yapmak mümkün olduğundan emin değilim, ama nasıl bilmiyorum!

cevap

75

Sadece contains

myFunction(strings.contains(myString)) 
+1

Bir dize ile uğraşmazsam ancak bir değerin olası eşleşme olup olmadığını kontrol etmem gerekirse ne yapmalıyım? – tutuca

+13

Öyleyse bunun için yeni bir soru sormalısınız ... –

+1

@tutuca, bunu kontrol et [check-if-değerler-liste-is-of-of-string] (http://stackoverflow.com/questions/16046146/check-if-değerleri-in-listeye-parçalı-of-string olan). –

23

kullanmak Ve katı eşitlik kullanmak istemiyorsa, şunu kullanabilirsiniz var:


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

bu farklı yüklemi de çalışması gerekir

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

Yalnızca isDefined – Ciaran0

1

Sizin durumunuzda benzersiz değerlerinizin bulunduğundan emin olmak için Set ve Not List'i kullanmayı düşünürüm ly. bazen kopyaları eklemeniz gerekmedikçe.

Bu durumda, listeler etrafına sarıcı işlevleri eklemeniz gerekmez.

1

Daha da kolay!

strings contains myString 
+0

ile birleştirilen bulmayı kullanmak yerine var olanları kullanabilirsiniz. Bu [kabul edilen yanıt] 'dan farklıdır (https://stackoverflow.com/a/14267635/8371915)? – user8371915

+0

Temel olarak aynı ancak farklılıklar şunlardır: 1. Daha az parantez 2. Daha az dönemler 3. MyFunction 4. referansı yok daha fazla beyaz alan. Genel; Benim cevabım = 25 karakter vs Kabul edilen yanıt = 38 karakter – Taylrl

+0

Bu retorik bir soruydu;) Burada [LQP] (https://stackoverflow.com/review/low-quality-posts/) adresinden aldığım bir bağlam vermek. Silmeyi önermedim, ancak geç cevap yazıyorsanız, biraz ek değer sağlamayı deneyin. Biraz sözdizimsel şeker gibi hissetmiyor, biliyorsun. Sadece ... – user8371915

İlgili konular