2013-01-10 12 views
51

Muszę sprawdzić, czy ciąg jest obecny na liście, i wywołać funkcję, która odpowiednio przyjmuje boolean.Sprawdzanie Scala, czy element jest obecny na liście

Czy można to osiągnąć za pomocą jednej wkładki?

Poniższy kod jest najlepszym mogę dostać:

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

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

Jestem pewien, że to możliwe, aby to zrobić z mniej kodowania, ale nie wiem jak!

Odpowiedz

75

Wystarczy użyć contains

myFunction(strings.contains(myString)) 
+1

Co zrobić, jeśli nie mam do czynienia z ciągiem, ale muszę sprawdzić, czy wartość jest jedną z wielu możliwych dopasowań? – tutuca

+13

Następnie powinieneś zadać nowe pytanie na ten temat ... –

+1

@tutuca, sprawdź to [sprawdzanie-jeśli-wartości-w-liście-to-część-ciągu] (http://stackoverflow.com/questions/16046146/checking-if-values-in-list-is-part-of-string). –

23

A jeśli nie chcesz używać ścisłej równości, można użyć istnieje:


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

to powinno działać również z innego orzecznika

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

Można po prostu użyć istnieje zamiast używać find w połączeniu z isDefined – Ciaran0

1

W twoim przypadku rozważałbym używanie Set, a nie List, aby mieć pewność, że masz unikalne wartości ly. chyba że potrzebujesz czasem dołączyć duplikaty.

W tym przypadku nie ma potrzeby dodawania żadnych funkcji opakowania wokół list.

1

Jeszcze łatwiejsze!

strings contains myString 
+0

Jak to się różni od [zaakceptowanej odpowiedzi] (https://stackoverflow.com/a/14267635/8371915)? – user8371915

+0

Zasadniczo jest to to samo, ale różnice są następujące: 1. Mniej nawiasów 2. Mniejsza liczba 3. Brak odniesienia do mojej funkcji 4. więcej białej przestrzeni. Ogólnie; Moja odpowiedź = 25 znaków kontra Przyjęta odpowiedź = 38 znaków – Taylrl

+0

Było to pytanie retoryczne;) Aby podać kontekst, dostałem się tutaj z [LQP] (https://stackoverflow.com/review/low-quality-posts/). Nie polecam usuwania, ale jeśli publikujesz późną odpowiedź, spróbuj podać dodatkową wartość. Trochę syntaktycznego cukru, nie czujesz tego, wiesz. Po prostu mówiąc ... – user8371915

Powiązane problemy