修改迭代器

bar*_*oco 0 iterator scala

我有一个从集合(a)创建的迭代器(ite):

var a = Set(1,2,3,4,5)
var ite = a.iterator
Run Code Online (Sandbox Code Playgroud)

如果我删除了我的集合中的2个元素:

a -= 2
Run Code Online (Sandbox Code Playgroud)

现在,如果我为所有元素移动迭代器,我将获得所有元素(包括2个元素).没关系,但是...我怎么能告诉迭代器删除2个元素?

Mir*_*ker 5

问题是你Set是不可变的(Scala默认为不可变集合),但因为它a是一个变量而不是一个值,所以下面的调用a -= 2实际上正在执行 a = a - 2.所以它不会改变集合,而是分配一个新的集合a.

相反,你可以使用一个可变集:var a = collection.mutable.Set(1,2,3,4,5).

scala> var a = collection.mutable.Set(1,2,3,4,5)
a: scala.collection.mutable.Set[Int] = Set(1, 4, 2, 5, 3)

scala>  val i = a.iterator
i: Iterator[Int] = non-empty iterator

scala> a -= 2
res0: scala.collection.mutable.Set[Int] = Set(1, 4, 5, 3)

scala> i.toList
res1: List[Int] = List(5, 3, 1, 4)
Run Code Online (Sandbox Code Playgroud)