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

scala - 是否可以编写一个不可变的双向链表?

问这个问题我觉得有点愚蠢,但我目前正在学习函数式编程并完成了一个关于创建单链表的练习,这让我开始思考,是否有可能创建一个不可变的双链表?

假设列表A :: B,在构建时,A需要了解B,但B也需要了解A。我一直在Scala中这样做,所以我不确定它是否特定于Scala,但我无法想象这将如何运作。

我不是在寻找替代品,因为我什么都不需要,我只是好奇。

0 投票
3 回答
1899 浏览

c# - ImmutableList 不包含采用 0 个参数的构造函数

我正在尝试像常规列表一样初始化不可变列表,但它告诉我它不需要 0 个参数。如果我传递 1 个参数、2 个参数等,它会引发相同的错误。

我在这里做错了什么?有没有办法在不使用 .Add 的情况下做到这一点?

0 投票
6 回答
1738 浏览

c# - 创建一个 ImmutableArray 而不复制

有没有办法(可能是一个肮脏的黑客)来创建一个只使用指定数组而不是复制它的 ImmutableArray?

我有一个我知道不会更改的数组,我想创建一个 ImmutableArray 以允许客户端安全地访问我的数组。

查看 ImmutableArray的源代码,我发现 Create 方法无济于事:

编辑:在 GitHub 上有一个关于这个特性的请求,它也提供了最快的 hack 使用:https ://github.com/dotnet/corefx/issues/28064

0 投票
1 回答
1290 浏览

python - 如何在 Flask 中向 request.form 添加参数

如何在 Flask 中{'client_id':'...', 'grant_type':'...'}添加对象?request.form

我知道request.form不可变的,但我需要这样做,因为我需要使用的方法(来自oauth)只是接受request.form,如果我通过.json它不起作用。

这个类的文档不好。我确实尝试创建一个实例ImmutableMultiDict,但我不知道如何将 dict 设置为ImmutableMultiDict然后request.form正确设置。

Obs:我无法像这样在请求中发送参数(键:值):

在此处输入图像描述

0 投票
3 回答
1947 浏览

c# - 当不可变集合比并发更可取时

最近阅读了有关不可变集合的信息。当读取操作比写入更频繁地执行时,建议将它们用作读取的线程安全。

然后我想测试读取性能ImmutableDictionaryConcurrentDictionary. 这是这个非常简单的测试(在 .NET Core 2.1 中):

您可以运行此代码。以滴答为单位的经过时间会不时变化,但所花费的时间ConcurrentDictionary是 的几倍ImmutableDictionary

这个实验让我很尴尬。我做错了吗?如果我们有并发,使用不可变集合的原因是什么?什么时候更可取?

0 投票
2 回答
47 浏览

java - 如何将可变对象编排为跨对象不可变

我有一个类似这样的java类

在上面的代码中,我调用了 Runner 类的 run 方法并将它产生的输出添加到 Map<> 对象中。对跑步者对象列表重复此操作。如何使作为输入传递给 run 方法的 map 对象不可变?我考虑过从地图创建一个不可变地图并将其作为输入参数传递。但我担心我可能创建的不可变映射的数量取决于执行的运行器对象的数量,这可能导致 OOM 错误。有没有关于如何去做的模式或解决方案?任何建议将不胜感激。

0 投票
1 回答
100 浏览

scala - 最惯用的迭代方式并添加到功能上

我正在使用 Gremlin 遍历GraphTraversal对象并检索顶点。

这是我正在使用的:

我希望能够做到这一点,而无需从可变集合转换为不可变集合。我不知道迭代器是否可能。Scala 执行此操作的方法可能是使用尾递归,但我不确定这样做是否有任何性能优势,并且在这一点上,最后一次转换为不可变可能无论如何都更具可读性。

此外,如果有更好的方法来收集遍历中的所有顶点,我也愿意接受这种优化。

0 投票
1 回答
180 浏览

c# - C# - 不可变集合在哪里?

我正在读一本书,它向我介绍了不可变集合,其中包括 ImmutableDictionary、ImmutableHashSet 等。

这本书说它在 Microsoft.Bcl.Immutable NuGet 包中,但我找不到它。有什么帮助吗?另外,我使用的是 .NET 4.6.1。

谢谢。

0 投票
1 回答
299 浏览

kotlin - (不可变集合是可变的)在 Kotlin 中返回 true

为什么会在 Kotlin 中发生这种情况:

list is MutableCollection返回 true 表示 Kotlin 不可变集合对象实现MutableCollection了接口,但它不会更改集合中的项目,而是抛出UnsupportedOperationException

这是真的吗?如果是,为什么不可变集合对象MutableCollection在 Kotlin 中实现接口?

是不是因为 Kotlin 集合继承自 Java 集合和更改方法(添加、删除、...)已经存在,避免更改集合的唯一方法是覆盖它并抛出异常(即使这是真的,它不是Kotlin 不可变集合对象实现MutableCollection接口所必需的,因为 java 更改集合方法已经存在并且可以被覆盖)?

0 投票
1 回答
1677 浏览

java - 这是在构建器对象中创建空集的最佳方法

一个类有一组定义为其实例变量的 String 对象。

步骤 1:我有一个为此类创建对象的方法,将一组空的 String 分配给实例变量,然后返回该对象。

接收它的方法将它传递给另一个方法,该方法将更多的 String 添加到该空集。

现在我应该如何在步骤 1 中创建空集?

一个。使用Collections.<String>emptyList()创建一个不可变的字符串集,当稍后在第二种方法中添加新字符串时,这不会出错。需要有关如何发生这种情况的基本原理的一些详细信息。

湾。new HashSet<>()这将创建一个可变映射。

哪种方法是正确的,为什么?有没有别的好办法?