代码之家  ›  专栏  ›  技术社区  ›  user2980746

在C#字典中键入xyz对的最有效方法是什么?

  •  0
  • user2980746  · 技术社区  · 11 月前

    我有一堆带有xyz对(字节)的对象需要添加到字典中。这是成千上万的,我不确定最有效的方法是什么。

    像这样的工作吗?

    Dictionary<int, Object> table;
    
    table.Add(new byte[3]{ x, y, z }.GetHashCode(), object);
    

    或者,使用字节[3]和相等比较器会更好吗?

    2 回复  |  直到 11 月前
        1
  •  0
  •   Sweeper    11 月前

    如果密钥始终为3个字节,则看起来像 ValueTuple 是合适的。

    Dictionary<(byte, byte, byte), object> table;
    
    table.Add((1,2,3), new object());
    

    不像a byte[] , 价值表 是一种值类型,因此在访问字典时不会导致额外的堆分配。

    您还可以将3个字节打包到 int 随着比特移位。这可能比值元组更快。

    byte b1 = ...;
    byte b2 = ...;
    byte b3 = ...;
    int key = (b1 << 16) | (b2 << 8) | b3;
    
    Dictionary<int, object> table = new();
    table.Add(key, new object());
    
        2
  •  0
  •   beautifulcoder    11 月前

    您需要一个相等比较器,并将其传递给字典构造函数。仅仅哈希并不能保证唯一性,哈希本身每次执行都会发生变化。