web-dev-qa-db-fra.com

Vérifier si les valeurs de List font partie de String

J'ai une chaîne comme celle-ci:

val a = "some random test message"

J'ai une liste comme celle-ci:

val keys = List("hi","random","test")

Maintenant, je veux vérifier si la chaîne a contient des valeurs de keys. Comment pouvons-nous faire cela en utilisant les fonctions de bibliothèque intégrées de Scala?

(Je connais la façon de diviser a en List, puis je vérifie avec keys list et je trouve la solution. Mais je cherche un moyen de le résoudre plus simplement en utilisant les fonctions de bibliothèque standard .)

42
Sibi

Quelque chose comme ça?

keys.exists(a.contains(_)) 

Ou encore plus idiomatiquement

keys.exists(a.contains)
72
rarry

Le cas simple est de tester le confinement de la sous-chaîne (comme indiqué dans la réponse de rarry), par exemple.

keys.exists(a.contains(_)) 

Vous n'avez pas dit si vous vouliez plutôt trouver des correspondances Word entières. Puisque la réponse de rarry suppose que vous ne l'avez pas fait, voici une alternative qui suppose que vous le faites.

val a = "some random test message"
val words = a.split(" ")
val keys = Set("hi","random","test") // could be a List (see below)
words.exists(keys contains _)

Gardez à l'esprit que la liste des clés n'est efficace que pour les petites listes. Avec une liste, la méthode contains analyse généralement la liste entière de manière linéaire jusqu'à ce qu'elle trouve une correspondance ou atteigne la fin.

Pour un plus grand nombre d'articles, un ensemble est non seulement préférable, mais est également une représentation plus fidèle des informations. Les ensembles sont généralement optimisés via des codes de hachage, etc. et nécessitent donc moins de recherche linéaire - ou pas du tout.

9
Rick-777