scala - 如何在scala中更改集合的元素
问题描述
在 scala 中,您可以有两种类型的集合,其中元素是不可变的或可变的,但是由于您无法索引这些集合,那么如何更改后者集合的元素?
解决方案
在 scala 中,您可以有两种类型的集合,其中元素是不可变的或可变的
这不是scala.collection.immutable.Set
和之间的区别scala.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]
[斯卡斯蒂链接]
两者之间的区别在于您不能将元素添加到不可变集合中。相反,当您调用该scala.collection.immutable.Set.+(elem: A): Set[A]
方法时,它将返回一个新集合(iset2
在本例中),该集合具有与原始集合 ( iset
) 相同的元素以及我们想要添加的元素。
而该scala.collection.mutable.Set.+=(elem: A): Set.this.type
方法返回相同的集合(实际上,正如您在上面的示例中看到的,我实际上忽略了返回值)并将其变异以包含附加元素。
在 Scala 中,集合的概念更接近于集合的数学概念,而不是集合。它不是包含元素的集合,而是一个谓词函数,您可以询问“此元素是否是集合的成员”?
推荐阅读
- unity3d - Unity:从资产包到按需资源
- xml - 如何在 XSLT 转换中为文本输出添加页脚?
- verilog - 使用Verilog实现光控
- reactjs - Styled-Components 条件传递道具
- c# - 如何将接收到的十六进制字节解析为可读字符串
- amazon-web-services - 我可以在开始训练作业之前检查 GPU 的可用性吗?
- single-sign-on - 使用 JHipster UAA 的 SSO(单点登录)
- ckeditor - ckeditor 3.6 - 超链接功能问题
- php - Show certain countries on WooCommerce checkout for particular products in cart
- flutter - 我无法根据越南的经纬度颤振地理定位器获取邮政编码