如何在scala中改变set的元素

问题描述 投票:0回答:1

在scala中,你可以有2种类型的集合,其中的元素是不可变或可变的,但由于你不能索引这些集合,所以如何改变后面这些集合的元素?

scala indexing set immutability mutable
1个回答
2
投票

在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] 方法,它将返回一个 新的 集 (iset2 在这种情况下),它具有与原始集合相同的元素(iset)加上我们要添加的元素。

scala.collection.mutable.Set.+=(elem: A): Set.this.type 方法返回 同一套 (事实上,在我上面的例子中,你可以看到,我实际上忽略了返回值)和 变种 来包含额外的元素。

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

© www.soinside.com 2019 - 2024. All rights reserved.