导出对象的唯一字典键的最佳方法是什么?

RLH

问题

我需要一种为对象字典生成键的方法。但是,我有一些要求使这变得有些困难。这是场景:

  1. 词典是引用类型对象的列表。
  2. 字典private在静态类中为。
  3. 外部代码需要获取字典中特定对象的密钥,但不得访问字典中的对象或字典本身。
  4. 给定字典中的特定对象,密钥必须一致地可重新计算/派生。如果对象的属性发生更改,则密钥不得更改。
  5. 相反,如果创建的新对象可以评估为equal字典中的另一个对象,则关键字必须是不同的,因为它们是两个单独的对象。
  6. 此实现必须是线程安全的。

非解决方案

解决方案#1
所有.Net对象都包含一个称为的方法.GetHashCode(),该方法返回一个整数值。您可以将其用作键。

问题
不可能。MSDN状态:

相等的两个对象返回相等的哈希码。

这打破了要求5,我假设(但未经测试)要求。#4。如果它可以满足这些规则,我希望有这样的选择。

解决方案2
将对象的指针转换为,int然后将其用作键。

问题
这打破了要求的本质。#3。传递指针并将其用作键并不安全。

解决方案3
将对象的指针转换为该的整数哈希值,并将哈希值用作键。

问题
尽管这不会违反任何规则,但我还是希望避免访问指针,因为这将涉及使用unsafe代码。我不反对使用不安全的代码,但如果可能的话,我宁愿避免使用它。

结论

也许我的要求有些挑剔。必须有某种合理的方法来从唯一对象派生密钥。有没有人经历过这样的情况并解决了这个难题?

亨克·霍尔特曼

1词典是ByRef对象的列表。

对象始终是.NET中的“通过引用”。这可能是误会的开始。参考相等是您需要/想要的。

3外部代码需要获取字典中特定对象的密钥,但绝对不能访问字典中的对象或字典本身。

这是真正的问题。没有它,对对象本身的引用将起作用。但是该框架仍然可以立即提供您的所有功能:

private Dictionary<object, MyClass> _myStore;

// add an item and return a key    
public object Add(MyClass item)
{
    object key = new object();
    _myStore.Add(key, item);
    return key;
}

并满足要求4:

private Dictionary<object, MyClass> _itemForKey;    // was _myStore
private Dictionary<MyClass, object> _keyForItem;


// add an item and return a key    
public object Add(MyClass item)
{
    object key = new object();
    _itemForKey.Add(key, item);
    _keyForItem.Add(item, key);
    return key;
}

protected object DeriveKeyFromItem(MyClass item)
{
   return _keyForItem[item];
}

注意:这些示例不是线程安全的(要求6),但这是要解决的标准功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

确定跨行的唯一字典键

来自分类Dev

如何在列表和列中的特定键中获取所有唯一字典值?

来自分类Dev

Python 参考字典键在同一字典中

来自分类Dev

Python-唯一字典的列表,其中每个字典值都是一个列表

来自分类Dev

python-如何从字典列表中确定找到的两个键是否属于同一字典

来自分类Dev

python-如何从字典列表中确定找到的两个键是否属于同一字典

来自分类Dev

python-将键的值替换为与同一字典中的不同键对应的值

来自分类Dev

根据特定键统一字典列表-在重复的情况下保留特定出现次数

来自分类Dev

Python3:将一个字典中每个键的多个值除以另一字典中每个键的多个值

来自分类Dev

python:检查一个键中的一定数量的字符是否与同一字典中的另一个键匹配

来自分类Dev

对于 Django 模型,拥有 5 个字符长的唯一字段的正确方法是什么?

来自分类Dev

一字典中类似字典的字符串列表

来自分类Dev

同一字典中的任务、动作或替代架构?

来自分类Dev

当列表中的用户不是字典中的键时,输出唯一字符串

来自分类Dev

从键列表中获取对象的最佳方法是什么?

来自分类Dev

python-在一组列表中仅保留唯一字段的最佳方法

来自分类Dev

从目标C的数组中获取一组唯一对象的最佳方法是什么

来自分类Dev

IComparable是在字典中强制执行唯一键的最佳方法吗?

来自分类Dev

是否有Python方式将一个字典的浮点值添加到另一字典的值列表中?

来自分类Dev

如何使用字典数组上的条件从同一字典中的另一个数组中提取元素?

来自分类Dev

在Python中的多个字典中搜索键的最佳方法是什么

来自分类Dev

PHPexcel导出处理大型导出的最佳方法是什么

来自分类Dev

不唯一字符按字典顺序排列

来自分类Dev

Mongo在非唯一字段上给出“重复键错误”

来自分类Dev

唯一字段列表

来自分类Dev

我应该在没有唯一字段的类中定义什么键,以便它可以被EF 6使用?

来自分类Dev

有条件地将键/值对添加到对象的最佳方法是什么

来自分类Dev

制作可变键和深度的嵌套对象的最佳方法是什么?

来自分类Dev

在XML中获得唯一ID元素的最佳方法是什么

Related 相关文章

  1. 1

    确定跨行的唯一字典键

  2. 2

    如何在列表和列中的特定键中获取所有唯一字典值?

  3. 3

    Python 参考字典键在同一字典中

  4. 4

    Python-唯一字典的列表,其中每个字典值都是一个列表

  5. 5

    python-如何从字典列表中确定找到的两个键是否属于同一字典

  6. 6

    python-如何从字典列表中确定找到的两个键是否属于同一字典

  7. 7

    python-将键的值替换为与同一字典中的不同键对应的值

  8. 8

    根据特定键统一字典列表-在重复的情况下保留特定出现次数

  9. 9

    Python3:将一个字典中每个键的多个值除以另一字典中每个键的多个值

  10. 10

    python:检查一个键中的一定数量的字符是否与同一字典中的另一个键匹配

  11. 11

    对于 Django 模型,拥有 5 个字符长的唯一字段的正确方法是什么?

  12. 12

    一字典中类似字典的字符串列表

  13. 13

    同一字典中的任务、动作或替代架构?

  14. 14

    当列表中的用户不是字典中的键时,输出唯一字符串

  15. 15

    从键列表中获取对象的最佳方法是什么?

  16. 16

    python-在一组列表中仅保留唯一字段的最佳方法

  17. 17

    从目标C的数组中获取一组唯一对象的最佳方法是什么

  18. 18

    IComparable是在字典中强制执行唯一键的最佳方法吗?

  19. 19

    是否有Python方式将一个字典的浮点值添加到另一字典的值列表中?

  20. 20

    如何使用字典数组上的条件从同一字典中的另一个数组中提取元素?

  21. 21

    在Python中的多个字典中搜索键的最佳方法是什么

  22. 22

    PHPexcel导出处理大型导出的最佳方法是什么

  23. 23

    不唯一字符按字典顺序排列

  24. 24

    Mongo在非唯一字段上给出“重复键错误”

  25. 25

    唯一字段列表

  26. 26

    我应该在没有唯一字段的类中定义什么键,以便它可以被EF 6使用?

  27. 27

    有条件地将键/值对添加到对象的最佳方法是什么

  28. 28

    制作可变键和深度的嵌套对象的最佳方法是什么?

  29. 29

    在XML中获得唯一ID元素的最佳方法是什么

热门标签

归档