【发布时间】:2015-06-13 21:23:16
【问题描述】:
我听说 .NET System.Collections.Immutable 集合被实现为平衡二叉树,以满足它们的不变性约束,即使是传统上建模像 Dictionary 这样的哈希表的集合,通过使用 GetHashCode 的整数值作为排序键。
如果我有一种生成哈希码便宜且比较便宜的类型(例如string 或int),我不关心我的排序性集合,更喜欢ImmutableSortedDictionary 是否有意义,因为底层数据结构无论如何都是排序的?
【问题讨论】:
-
如果我有一个生成哈希码很便宜的类型,并且比较便宜(例如字符串或整数),我不关心排序的-ness of my collection. 我想你已经回答了自己。把事情简单化。从另一个程序员的角度来看,我会很困惑地阅读代码并发现排序字典的排序是无用的,这让我想知道为什么首先要使用它。
-
@YuvalItzchakov:
ImmutableDictionary和ImmutableSortedDictionary(它们都是 AVL 树) -
那为什么重要呢?如果排序不是问题,为什么不使用
ImmutableDictionary -
@Yuval:因为
ImmutableDictionary是排序的。它只是按GetHashCode的数值排序,而不是按键类型提供的内在排序。 -
@Yuval:这不是一个实现细节,正如 Dictionary 是一个哈希表是一个实现细节。其价值在于,在典型用例中,按 T 排序的版本可能比按 GetHashCode 排序的版本更快,就像 Dictionary 通常比 SortedDictionary 更快一样。
标签: c# .net base-class-library immutable-collections