问题标签 [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 投票
0 回答
262 浏览

c# - 将 C# System.Numerics.Vector 更改为可变?

我正在考虑System.Numerics.Vector在涉及大量数学计算的 C# 项目中使用。这个包吸引我的主要是硬件加速功能。但是,据说数据结构是不可变的,而在我的场景中,多个向量会频繁更新。我发现没有像BuilderinSystem.Collection.Immutable包这样的东西,所以我能想出的唯一方法就是每次需要更改它时都生成一个新的向量,这非常耗时。

知道我应该如何处理这个问题吗?或者是否有任何其他包可以在 C# 中进行快速矢量数学运算?

0 投票
1 回答
1868 浏览

java - Java的不可变树图?

我正在寻找Java中不可变树映射的实现,它允许通过共享相同部分进行写时复制样式修改。因此,本质上,ImmutableJS对 JavaScript 所做的正是 Java。

如果有人碰巧不熟悉 ImmutableJS 的工作原理,我希望它在 Java 中是这样的:

在上面的示例中,map2不会复制存储树的部分hello -> world,它会重新使用该部分。

有没有这样的实现,还是我必须从头开始创建一个?

0 投票
1 回答
241 浏览

typescript - Redux/ImmutableJS 嵌套状态 + 不可变集合的大复杂度

我正在尝试为我的第一个 Redux (NGRX/Store) 项目了解 Immutability。避免状态突变被证明是非常痛苦的,在与 Object.assign({}) 和状态突变错误作斗争之后,我发现了 Immutable.JS。这让事情变得容易多了。

假设我有一个金融交易应用程序,它需要在加载时在图表上显示一组条形图。每秒几次,最后一根柱需要根据实时价格信息进行更新,并且每隔一段时间就会添加一个新柱。

对于 {1-n} 种金融工具(EURUSD/GBPJPY/Gold/Oil 等),这一切都需要发生。所以我为我的应用程序的这一部分提出了这个模型:

您会注意到我有一个包含不可变列表的不可变映射。所以我的第一个问题是:像这样做“不变性中的不变性”有什么意义吗?自从打电话

正在有效地返回一个全新的状态,因此我不清楚我是否需​​要像这样具有嵌套不变性......我确实希望能够订阅 ClosedCandles 列表上的更改;使这个不可变会允许事物直接观察变化吗?或者这些东西是否仅从“顶级”级别检测到。

我想我的下一个问题是:我是否需要担心这个。我已经意识到更改不可变集合是一项非常昂贵的操作。如果我这样做 list.push 或 map.set 引擎盖下实际发生了什么。我是否将整个数组中的每一项都复制或映射到一个全新的数组/映射中 - 每次我需要更改不可变集合中的某些内容时?还是我只是在更改参考或其他内容?

我希望有一些关于不可变集合的 Big-Oh Complexity 的已发布信息,这样可以很容易地理解这些东西将如何执行,但我在任何地方都找不到。

0 投票
3 回答
93 浏览

scala - Immutable Scala Collection

I have this Scala code that spits out unique random numbers for the Italian lottery:

I would like to ask, how would you write the same program with an immutable collection, in a more appropriate functional-style programming?

Thanks in advance.

0 投票
2 回答
7209 浏览

c# - Nuget 似乎安装了错误版本的 System.Collections.Immutable

我对 Nuget 有一个令人困惑的问题。我有许多项目声称在1.3.0版上安装了 System.Collections.Immutable但如果我查看所有参考资料中的 dll 版本,我会看到1.2.1.0版

当我用 JustDecompile 打开 DLL 时,我看到 在此处输入图像描述 哪个声明 DLL 版本确实是1.2.1.0但已安装在目录packages\System.Collections.Immutable.1.3.0

一个典型的 packages.config 文件将包含

而 csproj 是

如果我尝试从库中打开下载的 nuget 包并使用 nuget 包资源管理器打开,我会得到

在此处输入图像描述

0 投票
1 回答
2129 浏览

javascript - 如何从不可变树中获取更改树,最大限度地重用节点

我有一个像这样的树结构数据:

我正在使用 Angular 2。据我所知,只要输入更改并且您的更改检测策略为onPush.

为了优化树结构更新(例如在嵌套级别切换节点或更改此类节点的任何属性),我使用了Immutable

Immutable如何帮助我优化更新?我读到Immutable会在数据更改时重用旧数据中的引用来构造新对象。

如何有效地使用不可变数据结构来更新嵌套级别的节点?

假设

  1. 我没有keyPath任何节点。
  2. 每个节点都有一个唯一的id属性值,可用于查询树数据(但如何?)

问题

  1. 如何在嵌套级别的某处更新节点?联系该节点的最有效方式是什么?
  2. 如何更新多个节点?我听说过withMutationsAPI,但还有其他有效的方法吗?

我的方法

  1. 深拷贝所有内容,然后修改新构造的对象:

    /li>
  2. 我正在尝试实现的内容:

    /li>

第二种方案我希望实现节点的复用,如下图:

immutablejs 中的树视图

0 投票
0 回答
631 浏览

android - 如何设置具有自动值的 ImmutableList?

我尝试使用自动值设置一个不可变列表。我遵循了官方的用户指南,该指南建议实施类似的方法:

我的实现是下一个:

我想遍历作为改造调用响应的 MovieList 对象的电影。

上面的改造调用会导致以下堆栈跟踪:

如果在上面的 MovieList 抽象类中将 ImmutableList 更改为简单 List,则 Retrofit 调用将起作用并且我的 Object 将被打印。是否需要添加一些依赖项?我的 ImmutableList 从com.google.common.collect.ImmutableList现在导入。

我应该如何设置 ImmutableList 依赖项以便能够遍历 MovieList 对象?

0 投票
0 回答
119 浏览

c# - ImmutableSortedSet 是否应该在 Contains(null) 上引发 ArgumentNullException

我花了两天时间追捕一个邪恶的虫子。我通过这个测试案例缩小了问题的范围,展示了实现相同接口的不同集合类的不同行为。具体Contains(null)抛出一个NullArgumentExceptionforImmutableSortedSet但不是 forArray或 mutable SortedSet

鉴于所有类 Array / SortedSet 和 ImmutableSortedSet 实现ICollection<T>不应该在Contains(null)调用中具有相同的行为吗?

ImmutableSortedSet当我将数据绑定到ItemsSource列表框的属性时,该错误就显现出来了。

问题是在数据绑定代码 ListBox (又名 Selector )深处的某个时刻询问集合Contains(null)?然后如果我绑定了一个ImmutableSortedSet.

那么这是一个带有ImmutableCollections或带有WPF或预期行为的错误,我应该知道比使用更好ImmutableSortedSet吗?

导致问题的代码ImmutableSortedSet可以在corefx github repo中找到

0 投票
2 回答
93 浏览

javascript - JavaScript 中的不可变和集合

我试图弄清楚如何在 JavaScript/TypeScript 中使用 Immutables 而无需花一整天的时间。我还没有准备好深入研究 Immutable.js,因为就类型安全而言,它似乎让你感到兴奋和干燥。

所以让我们举一个例子,我有一个数组,其中元素都是 MyType 类型。在我的类中,我有一个搜索数组并返回匹配元素副本的方法,因此我们不会编辑原始元素。现在说,稍后我需要查看对象是否在 Array 中,但我拥有的是副本,而不是原始对象。

处理这个的标准方法是什么?我能想到的任何方法来确定我是否已经拥有这个项目将采取某种形式的循环遍历集合并访问每个元素,然后进行笨拙的相等匹配,无论是将它们都变成字符串还是使用第三个 -党图书馆。

我想使用 Immutables,但我经常遇到这样的情况,这让它们看起来很没有吸引力。我错过了什么?

0 投票
2 回答
64 浏览

c# - 无法在 C# 中使结构内的值类型可变

我正在将 VB6 代码转换为 C# 在这里我必须将结构数组转换为 C# 中的 List 方法,但无法修改以下示例代码中的值,出现错误为“无法修改返回值,System.Collections.Generic.List<test.Program.TagFieldValue>.this[int]因为它不是变量”。

我做错了什么..有没有其他方法可以在不将我的类型转换为类的情况下做到这一点?