问题标签 [immutablearray]

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 回答
7393 浏览

c# - c# 中的 ImmutableArray 是什么

我看到这个

这个包提供了线程安全的集合,并且保证永远不会改变它们的内容,也称为不可变集合。

但我不明白究竟是什么,什么时候应该使用 ImmutableArray?

编辑:如今,微软的 github 包已经成为 .NET 生态系统的一部分。参考现在在这里

0 投票
2 回答
322 浏览

d - 如何在 D 中创建不可变的关联数组

有没有办法在 D 中创建一个不可变的关联数组?似乎没有办法定义关联数组;只声明一个。

0 投票
2 回答
110 浏览

arrays - D中不可变长度的可变数组

在 D 中是否有可能有一个可变数组,其长度在编译时未知以具有静态长度?

0 投票
3 回答
276 浏览

python - Python中空元组的潜在用途

我在玩 Python 中类级变量的风险,我认为列表作为类级变量的风险可以用元组来解决,例如,一个空元组。

拿:

这是有风险的,因为:

使用None而不是空元组(tuple()?)可能会很危险,因为它在迭代它时会失败。

由于不可变性,我认为这是一个不错的选择,但我认为我在任何地方都没有看到任何人谈论这个。你觉得这个推理有什么缺陷吗?它是pythonic吗?

0 投票
1 回答
142 浏览

arrays - 快速创建不可变空数组的优缺点

我是 Swift 编程语言的新手。我正在从 Apple 的网站上学习它。我遇到了下面的代码行:

我已经问过另一个与此相关但不完全的问题。我想知道在 Swift 中创建一个空的不可变数组的优缺点是什么。由于上面的代码行包含 let 关键字,它明确表示将在内存中创建一个字符串类型的空数组。我的兴趣点是为什么有人需要它?它有什么用吗?否则,Apple 不会允许这样做。所以我想知道一个例子的优缺点。

注意:我在 Google 和 StackOverflow 中搜索了我的查询,但没有找到我要查找的确切原因。所以在你否决这个问题之前请三思。

编辑:以前提出的问题根本没有解决我当前的问题。通过这个问题,我想知道在什么情况下我应该这样做。为什么 Apple 确实提供了这样的功能,它允许我们创建一个空的不可变数组。因为一个空数组将没有任何值,并且在创建它之后您将无法将其值编辑为空,并且您也无法在其中添加或删除任何项目。那么为什么编译允许写这样的行呢?希望我现在很清楚。

0 投票
0 回答
150 浏览

c# - 为什么在结构中使用 ImmutableArray 类型的静态字段会导致 TypeLoadException

我试图在结构中使用类型的静态字段,ImmutableArray<T>其中T是结构的类型。但是,当我尝试执行此操作时,我会TypeLoadException在执行程序时立即获得。这似乎发生在程序本身甚至开始运行之前。没有可用的堆栈跟踪,我无法单步执行任何操作。这是一个说明问题的简单示例:

这是我得到的错误代码: System.TypeLoadException was unhandled
消息:mscorlib.dll 中发生了“System.TypeLoadException”类型的未处理异常附加信息:无法从程序集“Alpha,Version=”加载类型“Alpha.Program+Simple” 1.0.0.0,文化=中性,PublicKeyToken=null'。

如果我不通过删除它来初始化该字段,ImmutableArray<Simple>.Empty它仍然无法运行。但是,如果我将静态字段更改为以下任一项,程序运行得很好:

我正在使用 Visual Studio Community 2015 和 System.Collections.Immutable 版本 1.1.37。

0 投票
1 回答
979 浏览

c# - 在不同 dll 中的接口上调用具有 ImmutableArray<> 的方法时引发 System.MissingMethodException

问题

我在两个各自的 dll 中有以下代码。dll1 依赖于 dll2。

DoWork()被调用时,它将执行得myInterface.MyListMethod(ImmutableList<byte>.Empty);很好。当它去执行时,会myInterface.MyArrayMethod(ImmutableArray<byte>.Empty);抛出以下异常:

Exception:System.MissingMethodException: Method not found: Namespace.MyArrayMethod(System.Collections.Immutable.ImmutableArray'1<Byte>)

dll1.dll

dll2.dll

测试

从我的角度来看,这似乎ImmutableArray<>是错误的,因为我已经尝试了多种类型,包括如您在上面看到的,以及 Immutable 命名空间中的其他类型。它只发生ImmutableArray<>在我尝试过的情况下。

我还确保这两个 dll 都是当前的 dll,并且 gac 周围没有一些旧的缓存版本。更新接口以具有另一个方法,然后在 MyArrayMethod 按预期工作之前调用该方法。

Visual Studios 特别不会在包含ImmutableArray<>参数的接口上调用对方法的引用,但它会针对带有ImmutableList<>. ImmutableArray<>如果您从方法中删除参数,它也会获取引用。

MyArrayMethod 只有一个引用

然而,该解决方案构建良好,只有当它在运行时尝试 JIT 时才会引发此错误。

0 投票
1 回答
2047 浏览

json - 无法分配给“AnyObject?!”类型的不可变表达式

我做了一些搜索,但仍然无法弄清楚如何解决该错误。基本上我正在从 Json 文件中读取书单,然后对其进行更新。读取部分很好,但尝试更新时会发生错误(“无法分配给类型‘AnyObject?!’的不可变表达式”)。

Json 文件 Book.json 如下:

书单有预期值,请参阅控制台输出:

对于print (boo["isRead"]),控制台结果是Optional(false),这是正确的。

Booklist 已经是一个 NSMutableArray,我也尝试将其更改为

但这无济于事。

也称为Swift:无法分配给“AnyObject?!”类型的不可变表达式 ,更改为以下也会得到相同的错误:

在这种情况下,任何人都可以建议如何更新 BookB 的书单中的 isRead。或者更好的是如何更新 Book.json 文件。

0 投票
1 回答
1757 浏览

c# - 静态 ImmutableArray 未初始化

我有一个带有静态成员的内部静态类 MyLists

internal static ImmutableArray<string> MyList = new ImmutableArray<string> { "asd", "qwe" };

在另一个公共测试类 Tests 中,我有一个 MyTest 函数,用于选择和比较列表。我得到一个

Additional information: The type initializer for 'TestMyLists' threw an exception. Object reference not set to an instance of an object.

当我调试时,我看到静态 ImmutableArray 为 value = Uninitialized。为什么?

0 投票
2 回答
460 浏览

scala - 使用不可变将字符串附加到数组

将 String 列表作为输入(其中之一可能是None)。如何使用Immutable Object.

var如果我使用or ,这很容易Mutable Object,这里有一个例子:

问题1:如果我只想使用val对象怎么办?

注意:如果list2None返回数组不应该有任何None对象

Question2 : ..and iflist1andlist2wereList[CustomClass]whereCustomClassis

case class CustomClass(string:String)

你会怎么做?

问题3:......如果我们用......使方法复杂化怎么办?

case class CustomClass1(string1:String)

case class CustomClass2(string2:String)

显然 CustomClass1 和 CustomClass2 可能在它们的类中有一些其他参数,使它们彼此不同。该方法的签名将是: