的一部分,我有一个这样的字符串:检查,如果在列表中的值是字符串
val a = "some random test message"
我有一个这样的名单:
val keys = List("hi","random","test")
现在,我要检查是否字符串a
包含来自keys
的任何值。我们如何使用Scala的内置函数来实现这一点?
(我知道分裂a
列出的方式,然后做一次检查与keys
列表,然后找到解决方案。但我正在寻找解决它更简单地使用标准库函数的方式。)
的一部分,我有一个这样的字符串:检查,如果在列表中的值是字符串
val a = "some random test message"
我有一个这样的名单:
val keys = List("hi","random","test")
现在,我要检查是否字符串a
包含来自keys
的任何值。我们如何使用Scala的内置函数来实现这一点?
(我知道分裂a
列出的方式,然后做一次检查与keys
列表,然后找到解决方案。但我正在寻找解决它更简单地使用标准库函数的方式。)
像这样?
keys.exists(a.contains(_))
或甚至更惯用
keys.exists(a.contains)
的简单情况是测试子串遏制,例如(如在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
方法通常线性扫描整个列表,直到找到匹配或达到结尾。
对于较大数量的项目,一组不仅更可取,而且更真实地表示信息。集合通常通过哈希码等进行优化,因此需要更少的线性搜索 - 或根本不需要。
+1强调使用Sets! – Sibi
或'keys exists a.contains' – Eastsun
根据OP的需要,
val keys = List("mess")
将产生可能是误报的结果。keys.exists(a.split(' ').contains)
可能更准确。 – nadavwr这个解决方案很棒,但我很难理解它。你们能帮我吗? – KirdApe