2013-04-16 59 views
32

的一部分,我有一个这样的字符串:检查,如果在列表中的值是字符串

val a = "some random test message" 

我有一个这样的名单:

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

现在,我要检查是否字符串a包含来自keys的任何值。我们如何使用Scala的内置函数来实现这一点?

(我知道分裂a列出的方式,然后做一次检查与keys列表,然后找到解决方案。但我正在寻找解决它更简单地使用标准库函数的方式。)

回答

51

像这样?

keys.exists(a.contains(_)) 

或甚至更惯用

keys.exists(a.contains) 
+0

或'keys exists a.contains' – Eastsun

+2

根据OP的需要,val keys = List("mess")将产生可能是误报的结果。 keys.exists(a.split(' ').contains)可能更准确。 – nadavwr

+2

这个解决方案很棒,但我很难理解它。你们能帮我吗? – KirdApe

7

的简单情况是测试子串遏制,例如(如在rarry的回答说)

keys.exists(a.contains(_)) 

你没有说你是否真的想找到整个单词匹配。由于rarry的答案假设你没有,所以假设你有这个选择。

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 _) 

记住,键名单只适用于小名单有效。通过列表,contains方法通常线性扫描整个列表,直到找到匹配或达到结尾。

对于较大数量的项目,一组不仅更可取,而且更真实地表示信息。集合通常通过哈希码等进行优化,因此需要更少的线性搜索 - 或根本不需要。

+0

+1强调使用Sets! – Sibi

相关问题