Scala相当于Python"" in"套装操作员?

时间:2014-10-03 20:04:22

标签: scala scala-collections

在Scala中,可以使用"包含"来检查某个项目是否是某个集合的成员:

object Main extends App {
    val the_set = Set(1, 2, 3, 4)
    if( the_set contains 3 ) println("The set contains 3!")
}

但是,我想做一个类似的比较,但是首先出现的是项目,最后是一个项目(我知道一个小的风格点)。我有一些Python背景,所以我希望在运算符中使用Python的

the_set = set([1, 2, 3, 4])
if 3 in the_set: print "The set contains 3!"

Scala有什么办法吗?如果您有点好奇,我想要这样做的原因是编写一个简洁的 if 语句,将一个值与我构建的长Set进行比较。同时,我希望首先使用该项,以便代码更易于阅读和理解。

谢谢!

2 个答案:

答案 0 :(得分:10)

以下是如何执行此操作的一个示例:

scala> implicit class InOperation[T](v: T) extends AnyVal { def in(s: Set[T]) = { s contains v } }
defined class InOperation

scala> val x = Set(1,2,3)
x: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

scala> 2 in x
res0: Boolean = true

它使用implicit classin方法(需要Set[T])添加到任意类型T并检查对象是否在集合中。

答案 1 :(得分:0)

Scala集具有方法contains。因此,您可以像这样使用它:

val x = Set(1,2,3)
x.contains(1) // True

您还可以使用语法糖并这样调用它:

x(1) // True