如何在 scala 中更改 set 的元素

How to change elements of set in scala

提问人:Enthusiast Coder 提问时间:6/7/2020 更新时间:6/8/2020 访问量:851

问:

在 scala 中,您可以有 2 种类型的集合,其中元素是不可变的或可变的,但是由于您无法索引这些集合,那么如何更改后一个集合的元素呢?

斯卡拉 索引 设置 不变性 可变

评论

0赞 username 6/7/2020
我猜,你遍历集合,或者使用set.find
3赞 Luis Miguel Mejía Suárez 6/7/2020
集合的想法更多的是包含谓词。因此,在添加和删除元素时,可变集更注重性能,而不是通过索引或键获取某些元素。

答:

3赞 Jörg W Mittag 6/8/2020 #1

在 scala 中,您可以有 2 种类型的集合,其中元素是不可变的或可变的

这不是 scala.collection.immutable.Setscala.collection.mutable.Set 之间的区别。它不是关于元素的可变性或不变性,而是关于集合本身的可变性或不变性。

但是,由于您无法为这些集合编制索引,因此如何更改后一组的元素

它不是关于改变可变集合的元素。它是关于改变可变集合本身的:

import scala.collection.mutable.{  Set => MSet}
import scala.collection.immutable.{Set => ISet}


val mset = MSet(1, 2, 3)
val iset = ISet(1, 2, 3)

mset += 4
mset //=> HashSet(1, 2, 3, 4): scala.collection.mutable.Set[Int]

val iset2 = iset + 4
iset //=> Set(1, 2, 3): scala.collection.immutable.Set[Int]
iset2 //=> Set(1, 2, 3, 4): scala.collection.immutable.Set[Int]

iset += 4
// ERROR: value += is not a member of scala.collection.immutable.Set[Int]

[Scastie 链接]

两者之间的区别在于,您不能将元素添加到不可变的集合中。相反,当您调用 scala.collection.immutable.Set.+(elem: A): Set[A] 方法时,它将返回一个新集合(在本例中),该集合具有与原始集合 () 相同的元素以及我们想要添加的元素。iset2iset

scala.collection.mutable.Set.+=(elem: A): Set.this.type 方法返回相同的集合(事实上,正如您在上面的示例中看到的那样,我实际上忽略了返回值)并对其进行更改以包含其他元素。

在 Scala 中,集合的概念更接近集合的数学概念,而不是集合。它不是一个包含元素的集合,而是一个谓词函数,你可以问“这个元素是集合的成员吗”?