以C#/最快的方式实现稀疏数组,将整数映射到特定的桶/范围号

我最初的问题是我需要在C#中实现一个非常快速的稀疏数组。 最初的想法是使用普通的Dictionary并将其包装在我自己的类中,只显示TValue类型参数。 事实certificate这很慢。

所以我的下一个想法是将所需范围内的每个整数( UInt32.MinValueUInt32.MaxValueUInt32.MinValue到某个大小的存储桶并使用它。 所以我正在寻找一种将无符号整数X映射到桶Y的好方法,例如:

将数字0-1023映射到8个不同的桶,每个桶包含128个数字,0-127,128-255。

但是,如果某人有更好的方法在C#中实现快速稀疏数组,那么这也是最受欢迎的。

我也注意到,当键是整数时, Dictionary很慢。 我不确切知道为什么会这样,但我为uintulong键写了一个更快的哈希表实现:

  • Efficient32bitHashTable和Efficient64bitHashTable

注意事项/缺点:

  • 64位(密钥是ulong )是通用的,但另一个(key是uint )假定为int值,因为那是我当时所需要的; 我相信你可以很容易地制作这个通用的。

  • 目前, 容量永远确定哈希表的大小(即它不会增长)。

根据以下因素,有101种不同的方法来实现稀疏数组:

  • 数组中有多少项
  • 如何将项目聚集在一起
  • 空间/速度交易
  • 等等

大多数教科书都有一个关于稀疏arrays的部分,只是在Google上做了大量的点击。 然后你必须将代码翻译成C#,或者只使用其他人编写的代码,我已经找到了两个没有太多努力(我不知道它们有多好)

  • 使用专业arrays加速您的代码
  • SparseArray for C#