问题标签 [immutable-collections]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
58 浏览

c# - 具有不可变存储的只读字段的类的构造函数

假设我们有以下简单的类。请注意,唯一的字段是readonly并且用于ImmutableList<int>

给定所示的构造函数,很容易从一些ints 创建一个实例:

现在,我可能还想要一个可以构建Abc给定 an的构造函数IEnumerable<int>

所以我们的类现在看起来像这样:

这确实有效:

但是,这个构造函数有点尴尬,因为乍一看,是这样的:

可能看起来像是在Abc用单个元素 ( item) 创建一个。但是如果item实际上是一个IEnumerable<int>具有多个项目的,上面的第二个构造函数将被调用。

如果您查看 Microsoft ImmutableListAPI,它们实际上调用ImmutableList.CreateRange了类似于上面的第二个构造函数的静态方法。这很好,因为我们避免了上述视觉模糊。

好的,让我们开始为我们的Abc类绘制一个类似构造函数的简单实现:

当然,我们在这里遇到了一个问题,因为该elts字段是readonly并且不能通过这个静态方法初始化:

在此处输入图像描述

CreateRange那么,为我们的课程实现的好方法是Abc什么?

0 投票
1 回答
1416 浏览

scala - scala.collection.immutable.Vector 不能转换为

我很困惑为什么我不能从以下 Scala 代码行中产生一个集合:

它在这个函数内部,它使用不可变向量。

我在堆栈跟踪中收到以下错误:

我很困惑,因为我不想强制转换任何东西,它只是一个没有任何类型转换的简单语句。

如果编译器无法理解类型,我也尝试了这个:

0 投票
2 回答
18 浏览

kotlin - 如何使用 Kotlin 样式向 CopyInWriteCollection 添加元素?

假设我们有一个自定义集合

如果我需要添加几个元素,我会这样做:

并且newCollection包含来自oldCollection并且还包含 1,2,3 的元素。完美的!

但是如何使用forEachof从另一个集合中添加元素map

0 投票
2 回答
232 浏览

scala - 当我们可以从中添加或删除元素时,地图或列表如何是不可变的?

下面是声明不可变 Map 的 scala 代码

在这里我们可以添加或更改 Map 的内容,那么我们怎么能说 scala 中的地图或列表是不可变的

0 投票
1 回答
143 浏览

scala - 以更不可变的方式解决此练习的更好方法是什么?

我正在尝试解决 HackerRank 上的问题。我试图以更实用的方式解决这个问题(使用不变性)。我尝试了一个解决方案,但我对此并不完全有信心。

这是问题的链接:

https://www.hackerrank.com/challenges/sock-merchant/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=warmup

我的可变解决方案是这样的:

相同解决方案的不可变版本:

考虑到函数式编程原则,解决这个问题的理想方法是什么?

0 投票
0 回答
58 浏览

java - 如何从 Java 创建 Kotlin 列表?

如何从 Java访问和listOf等方法。我在一个不使用 Kotlin 的项目中,但我们想使用有效的只读 Kotlin 集合。为什么?因为即使在 Java 中使用不可变列表时,它们也有会在运行时而不是在编译期间引发错误的 mutator 方法。mapOfsetOf

0 投票
1 回答
1351 浏览

java - 来自 HashMap 的 ImmutableMap.Builder

HashMap<K,V>每个键都有一个默认值。

我想将它转换为一个,ImmutableMap.Builder因为我有另一个ImmutableMap我想合并并覆盖到原始 HashMap 中。我想覆盖一些默认对并最终构建一个ImmutableMap.

如何转换HashMapImmutableMap.Builder

我还没有看到ImmutableMap.Builder 构造函数得到一个HashMap.

0 投票
1 回答
97 浏览

f# - 如何使用 FSharpx 的 PersistentVector 从索引 N 中删除一个项目?

我注意到来自 FSharpX 的 PersistentVector 没有 remove at index 方法。

https://fsprojects.github.io/FSharpx.Collections/reference/fsharpx-collections-persistentvector-1.html

它可以修改第 n 个位置的项目,但不能删除它。这似乎是一个奇怪的遗漏。如果不可能,那么有人可以建议一个具有这种能力的不同的不可变持久集合。

我当前从向量中删除id处的项目的代码是蛮力

请注意,我正在尝试使用 PersistentVector 作为 UI 的后备存储。我正在试验https://github.com/JaggerJo/Avalonia.FuncUI,它是 Avalonia 的 Elmish 端口。我走了很远,然后想在一行上添加一个删除按钮,但我找不到更新我的后备存储的方法。:(

UI 的示例代码是

https://gist.github.com/bradphelan/77f3fcb8e660783790c5610290cd8d97

0 投票
2 回答
129 浏览

python - 为什么 Online Python Tutor 将这个不可变整数以图形方式呈现为两个不同的整数?

在 Fluent Python 中,作者 Luciano Ramalho,第 8 章,Copies Are Shallow by Default,有一个例子:

作者建议我们应该使用 Online Python Tutor 运行此代码,以逐步了解发生了什么。

我使用 Online Python Tutor 执行了前两行,这是我得到的屏幕截图:

在此处输入图像描述

让我困惑的是:

每个列表中的所有三个元素,不可变整数,列表和元组实际上是相同的,例如

那么为什么图表在各自列表的开头显示了两个单独的 3 呢?

0 投票
4 回答
830 浏览

java - 如何使用列表创建不可变类类中的元素

带列表的不可变类

测试不可变类以打破不变性

输出是

为什么以及如何将这个从客户端添加到列表中的新课程元素随时添加,所以我们如何解决这个问题,因为这个不可变类在创建后不允许修改