ImmutableArray <T>和ImmutableList <T>之间的区别

use*_*731 28 .net c# immutable-collections

什么是ImmutableArray<T>和之间的区别ImmutableList<T>,哪个最好使用每个?

Adw*_*een 26

以下是一些可能有助于解释的阅读材料

http://blogs.msdn.com/b/dotnet/archive/2013/06/24/please-welcome-immutablearray.aspx

这是摘录

使用不可变数组的原因:

  • 更新数据很少或元素数量很少(<16)
  • 您需要能够在性能关键部分中迭代数据
  • 你有许多不可变集合的实例,你无法负担将数据保存在树中

坚持使用不可变列表的原因:

  • 更新数据很常见,或者元素数量预计不会很小
  • 更新集合比迭代内容更具性能要求


Raj*_*jan 18

我想你问的是两者都用在哪里.这个博客将有所帮助,否则这里会提到一些好处.

在以下时使用不可变数组:

  • 更新数据很少或元素数量很少(<16)
  • 您需要能够在性能关键部分中迭代数据
  • 您有许多不可变集合的实例,并且您无法承担将数据保存在树中的费用

在以下时使用不可变列表:

  • 更新数据很常见,或者元素数量预计不会很小
  • 更新集合比迭代内容更具性能要求

  • 此答案似乎是从http://blogs.msdn.com/b/dotnet/archive/2013/06/24/please-welcome-immutablearray.aspx复制而没有正确的归属.-1 (13认同)
  • 在不可变结构中“更新数据”意味着什么? (3认同)
  • @M-Pixel 它的意思是“创建一个新版本,其中元素被更改、添加或删除”。列表可以有效地做到这一点,而数组却不能。 (2认同)

Jam*_*mes 6

主要区别在于 anImmutableArray只是普通数组的包装器,这意味着检索数组中的元素非常快。

AnImmutableArray也是一个结构体,这意味着它是一种值类型,因此它比作为引用类型的不可变列表占用更少的空间。

出于这些原因,ImmutableArray如果您很少需要更新其数据,或者元素数量很少(小于 16),或者如果迭代集合的性能很重要,则适合使用an 。

如果您的需求与上述原因不符,则应使用ImmutableList.

在此处查看文档

  • 该链接完全回答了这个问题。但是你对值类型和大小的评论是狡猾的。 (2认同)
  • @binki:您正在查看错误的文档页面。`ImmutableArray` 类只是一个带有辅助方法的 _static_ 类。实际对象本身是一个“结构体”。也就是说,我确实同意这篇文章对值类型做出了毫无根据的陈述,尽管“ImmutableArray&lt;T&gt;”类型的陈述的准确性如何。 (2认同)

Tan*_*ett 5

通过博客文章“请欢迎 ImmutableArray<T> ”(其他人都引用同一篇博客文章),差异是......

ImmutableArray

  • 简单的实现(只是一个数组)。
  • 未针对快速更新大型集合进行优化(需要复制整个数组)。
  • 对于大多数用例(不涉及更新大型集合的任何情况)更有效。

ImmutableList

  • 更复杂的实现(涉及树)。
  • 针对快速更新大型集合进行了优化(可以在对数时间内完成)。
  • 对于大多数用例来说效率较低。

因此,如果您更新不多,或者您的收藏量很小,请使用ImmutableArray. 如果您要频繁更新大型集合,则需要使用ImmutableList.