用于实现Scala SeqLike的惯用方法containsAny

时间:2013-03-23 15:20:01

标签: scala

Scala SeqLike实施方法contains。如何干净地实施containsAny功能?

假设我想知道字符串string是否包含blacklist中列出的任何黑名单字符:

val blacklist = List("(", ")", "[", "]", "{", "}", "<", ">")
string containsAny blacklist

如何干净利落地实施第二行?

到目前为止我的版本看起来像这样:

(blacklist.view map string.contains) contains true

1 个答案:

答案 0 :(得分:10)

最好的办法是将黑名单设定为一套。

val blacklist = "()[]{}<>".toSet

现在,您可以使用exists查找字符串中是否存在这些字符。由于Set[T]扩展T => Boolean,您可以直接使用该集,而不必编写显式条件。

scala> "I like fish (but not herring)" exists blacklist
res1: Boolean = true

scala> "I like fish, especially salmon!" exists blacklist
res2: Boolean = false

(注意:请注意字符串"I am a string"和字符之间的区别:'c'。单字符字符串是字符串,而不是字符。)