如何将集合作为过滤函数的可接受参数?
scala> val v1 = Set(1,2,3)
v1: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
scala> val v2 = Set(2,3,4)
v2: scala.collection.immutable.Set[Int] = Set(2, 3, 4)
scala> v1 filter v2
res6: scala.collection.immutable.Set[Int] = Set(2, 3)
答案 0 :(得分:2)
scala.collection.Set[A]
扩展A => Boolean
- 在Scala中,一组 是一个函数。
同样,Map[A, B]
延伸A => B
,List[A]
延伸Int => A
。
答案 1 :(得分:2)
Huw said it correctly:一个集合是一个函数。
Set将其类型的每个值映射到布尔值true
含义"是的,我包含该值"和false
含义"不,我不是。"
类似地,Map获取键类型的值并返回其值类型的值; List获取整数并返回该索引处的元素。
这不是Scala的特性,这是对Set,Map和List的含义的合理解释。
有趣的是,Set函数的域(" legal"输入)是该类型的所有值,而使用Map和List只允许值的子集。
答案 2 :(得分:0)
http://docs.scala-lang.org/overviews/collections/sets.html
集合的apply方法与contains相同。因此set(elem)与set contains elem相同。
v1 filter {x => v2.contains(x)}
~ v1 filter {v2.contains(_)}
~ v1 filter {v2.apply(_)}
~ v1 filter v2