W.P*_*ill 2 scala tostring scala-collections
我想创建一组名为的整数IntSet.除了它的函数以逗号分隔(与调用时相同)打印元素之外,它在每个方面IntSet都是相同的,并且它有一个带有整数的构造函数.最简单的方法是什么?Set[Int]toStringmkString(",")Traversable
> IntSet((1 to 3)).toString
1,2,3
Run Code Online (Sandbox Code Playgroud)
我认为会有一些单行方式来做到这一点,但我一直在摆弄隐式函数和扩展HashSet,我无法弄明白.
诀窍是使用代理对象.Eastsun的答案如下.这是一个稍微不同的版本,它定义了一个命名IntSet类型并使其不可变.
import collection.immutable.{HashSet, SetProxy}
class IntSet(values: Traversable[Int]) extends SetProxy[Int] {
override val self: Set[Int] = HashSet(values.toSeq:_*)
override def toString() = mkString(",")
}
Run Code Online (Sandbox Code Playgroud)
scala> import scala.collection.mutable
import scala.collection.mutable
scala> def IntSet(c: Traversable[Int]): mutable.Set[Int] = new mutable.SetProxy[Int] {
| override val self: mutable.Set[Int] = mutable.HashSet(c.toSeq :_*)
| override def toString = mkString(",")
| }
IntSet: (c: Traversable[Int])scala.collection.mutable.Set[Int]
scala> IntSet(1 to 3)
res0: scala.collection.mutable.Set[Int] = 1,2,3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10325 次 |
| 最近记录: |