2016-11-08 7 views
0

Wie kann ich sicherstellen, dass eine Liste nur bestimmte Elemente enthält?Stellen Sie sicher, dass die Liste nur bestimmte Werte enthält.

List[Int] 

Eine Funktion die Liste nur um sicherzustellen, dass die Werte 10, 20 oder 30 enthält Ich bin sicher, dass dies ich gebaut wird es nicht finden können!

+0

Sie können eine Antwort akzeptieren, wenn Sie der Meinung sind, dass Ihre Frage gelöst wurde. Wenn nicht, sagen Sie den Leuten, die helfen, ihre Antworten auf ein akzeptables Niveau zu verbessern. Es hilft jedem. – maasg

+1

Sie möchten sicherstellen, dass Sie nur bestimmte Elemente zu einer Liste hinzufügen können? Eine Liste darf nur bestimmte Elemente enthalten, solange sie existiert, oder prüfen, ob eine bestimmte Liste bestimmte Elemente zu einem bestimmten Zeitpunkt enthält. 3 Optionen mit 3 verschiedenen Antworten. – maasg

Antwort

1

Ihre Frage ist nicht festgelegt, was Sie wollen passieren, wenn die Liste nicht die erforderlichen Elemente enthält.

Im Folgenden wird return true, wenn alle Elemente in der Liste Ihren Kriterien entsprechen, andernfalls false:

val ints1: List[Int] = List(1, 2, 3, 4, 5, 6, 7) 
val ints2: List[Int] = List(10, 10, 10, 10) 

ints1.forall(i => List(10, 20, 30).contains(i)) // false 
ints2.forall(i => List(10, 20, 30).contains(i)) // true 

Im Folgenden eine Liste mit nur diese Elemente zurück, die den Kriterien entspricht:

val ints1: List[Int] = List(10, 20, 30, 40, 50, 60, 70) 
val ints2: List[Int] = List(10, 10, 10) 

ints1.filter(i => List(10, 20, 30).contains(i)) // List(10, 20, 30) 
ints2.filter(i => List(10, 20, 30).contains(i)) // List(10, 10, 10) 
2

forall

können Sie forall mit einem Set mit Elementen verwendet werden, die gültig oder legal sind und Sie in der Liste zu sehen.

list.forall(Set(10, 20, 30).contains) //true means list only contains 10, 20, 30 

Set ist Funktion

Sie nicht contains Methode zu verwenden, müssen als SetInt => Boolean erweitert. Sie können Set verwenden wie eine Funktion

list forall Set(10, 20, 30) 

Filter

Sie Filter verwenden können, um die Elemente herauszufiltern, die nicht in der angegebenen Liste sind. Auch hier können Sie Set als Funktion Set Set extends Funktion verwenden.

list.filter(Set(10, 20, 30)).nonEmpty //true means list only contains 10, 20 and 30 

sammeln, wenn Sie Muster wie passend

Sammeln Sie eine Teilfunktion nimmt. Wenn Sie nur Pattern-Matching collect

list.collect { 
    case 10 => 10 
    case 20 => 20 
    case 30 => 30 
}.nonEmpty //true means list only contains 10, 20 and 30 

Scala REPL

scala> val list = List(10, 20, 30, 40, 50) 
list: List[Int] = List(10, 20, 30, 40, 50) 

scala> list forall Set(10, 20, 30) 
res6: Boolean = false 
+3

Die Frage lautet, wie man überprüft, ob die Liste _only_ die Werte '10',' 20' und '30' enthält. Um dies zu tun, müssten wir einen zusätzlichen Schritt ausführen und etwas wie "list.filterNot (Set (10, 20, 30) .contains (_)). IsEmpty" schreiben, um die Liste der Elemente zu überprüfen, die nicht enthalten sind "Set" ist leer. – Eric

0

verwenden Wenn Sie einfach bestimmen wollen, ob alle Werte in der Liste sind "legal", verwenden forall:

def isLegal(i: Int): Boolean = ??? // e.g. is it 10, 20, or 30 
val allLegal = list forall isLegal 

Wenn Sie Ihre Liste verkleinern möchten, so dass nur rechtliche Werte bleiben, uns e Filter:

val onlyLegalValues = list filter isLegal 

Beachten Sie, dass ein Set[Int] zählt als Int => Boolean Funktion, so dass Sie, dass anstelle Ihres isLegal Methode verwenden:

val isLegal = Set(10, 20, 30) 
val allLegal = list forall isLegal 
val onlyLegalValues = list filter isLegal 
Verwandte Themen