2017-02-16 3 views
1

Ich bin ein relativ neuer Programmierer lernen Scala und funktionale Programmierung durch eine Udemy-Klasse.Filter Wörter von einer Liste mit Wörtern von anderen

Ich bin bestrebt, eine Liste von Zeichenfolgen basierend auf einer anderen Liste von Zeichenfolgen zu filtern. Ich möchte Sie die erste Liste reduzieren, so dass, wenn ich es ausdrucken, es nur die Worte enthält - „rob“, „lernt“, „scala“

Hier ist der Code Ich arbeite mit:

val list1:Array[String] = Array("rob","you", "to","learns", "your", "the","scala", "a") 
 

 
val badWords:Array[String] = Array("you", "to", "your", "the", "a") 
 

 
val list2 = list1.map(x => badWords.map(badWord => list1.filter(word => word != badWord))) 
 

 
for (word <- list2) { 
 
    println(word) 
 
}

Meine Logik ist, dass von list1 für jedes Wort, ich dann jedes BADWORD Element gegen den aktuellen list1 Artikel zu vergleichen versuchen, um zu bestimmen, ob es oder nicht gefiltert werden soll.

Ich habe dies erfolgreich durch hartcoding in was ich gefiltert haben möchte, wie val list2 = list1.filter(_ != "to") ausgeführt. Offensichtlich möchte ich diesem die Fähigkeit zum Skalieren geben, also würde ich gerne lernen, wie man die Filter- und Kartenfunktionen koppelt (wenn das der richtige Ansatz ist).

Vielen Dank im Voraus, lassen Sie mich wissen, wenn ich weitere Informationen oder Kontext bereitstellen sollte.

+1

'list1 diff badWords' – jwvh

+0

ja das ist, was ich –

+1

Sie nicht erreichen war auf der Suche diff verwenden, es wird nicht mehr als eine Instanz von einem schlechten Wort entfernen –

Antwort

3

Sie können einen sehr einfachen Snippet für diese verwenden:

list1.filter(!badWords.contains(_)) 

Dadurch werden alle Wörter entfernen, die auch in der BADWORDS Liste sind. Ich bin nicht sicher, ob dies mit Arrays funktioniert, aber ich empfehle stattdessen, Listen zu verwenden.

Beispiel:

val words = List("Hello", "Hello", "World") 
val badWords = List("Hello") 
val filteredWords = words.filter(!badWords.contains(_)) 
+0

ich geprüft, und es war erfolgreich! –

+0

Jemand bemerkte auch, dass Sie Folgendes tun könnten: 'val list2 = list1.filterNot (badWords.contains)' - das gleiche, was Sie vorgeschlagen haben, nur andere Syntax –

+0

Ja, das funktioniert, aber es ist eine weniger bekannte Funktion –

Verwandte Themen