scala - 如何使用 Scala 更新不可变数组中的特定元素
问题描述
我在 scala 中有不可变数组,如下所示:
val myArray = Array.fill(3)(null)
所以我想要的是更新数组中的某个位置。比如第二个位置。我试过这种方式,但它总是只返回一个值的数组
myArray(0) = "2"
myArray(1) = "3"
由于某些原因,它只返回第一个元素 "2" 。
解决方案
Scala 中的数组是可变的。
val myArray = Array.fill[String](3)(null)
// myArray is Array(null, null, null)
myArray(1) = "1"
// myArray is now Array(null, 1, null)
如果您想要一个不可变的替代品Array
,请查看Vector
:
val myVec = Vector.fill[String](3)(null)
// myVec is Vector(null, null, null)
myVec.updated(1, "1") // returns NEW Vector(null, 1, null)
// here myVec is still Vector(null, null, null)
请注意,更新Vector
比改变 更慢Array
,这是不变性的代价。
另一种选择是ArraySeq
在(scala 2.13)中使用不可变:
val myArrSeq = ArraySeq.fill[String](3)(null)
// myArrSeq is ArraySeq(null, null, null)
myArrSeq.updated(1, "1") // returns NEW ArraySeq(null, 1, null)
// myArrSeq is still ArraySeq(null, null, null)
它的行为方式与 Vector 相同,并且在内部由普通数组支持,但是(重要!)每次更新都会复制整个序列( O(N) ),这在大多数情况下是不可接受的。
另外,检查这个相关问题。
推荐阅读
- vba - VBA Selenium - 在具有多个非常相似条目的容器中查找要单击的按钮
- java - MySQL 失败 -jar .exe
- angular - 与 woocommerce 的离子集成
- vue.js - Vue 3 嵌套路由
- python - 尝试制作特殊的 Discord 机器人消息
- javascript - 如何向此 HTML 代码添加搜索按钮
- javascript - 从 SPA 中,如何处理重定向以从 api 进行身份验证?
- javascript - Django - 未设置 csrf cookie
- firebase - Flutter - 类'DocumentSnapshot'没有实例获取器'docs'
- in-app-purchase - 购买订阅时在哪里可以添加策略消息?