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

字典的多键查找

  •  3
  • DarthVader  · 技术社区  · 15 年前

    我正在分析一个文件,我想以一种可以用两个键查找的方式将其存储在查找结构中。

    我有一个 User Entity 已经 name, email id ,类型不相关。

    我想把它放在 Dictionary<User, id> 所以我可以通过查找用户来获得用户id。

    我还想换个方式: Dictionary<Id, User>

    我很好奇我能不能用一个单一的结构

    Dictionary<User, User> ,然后实现 IEqualityComparer<User>

    有更好的办法吗?

    实施IEqualityComparer的最佳实践是什么?

    5 回复  |  直到 15 年前
        1
  •  1
  •   John Fisher    15 年前

    不管您是否需要进行这种类型的映射,您都可以使用一个字典来完成您所要求的内容。下面是一个粗略的示例:

    var dict = new Dictionary<string, object>();
    dict["ID_001"] = new User();
    dict["USER_??"] = 001; // Need a unique user string to replace the "??"
    

    当然,你想编什么就编什么。如果你想把函数包装起来,你可以避免每次得到一个项目时都要转换对象。(静态方法可能更适合您。)

    User GetUser(int id, Dictionary<string, object> dict) 
    {
        return (User)dict["ID_" + id];
    }
    
        2
  •  1
  •   mtreit    15 年前

    我不确定你的问题描述是否合理,原因如下:

    给予 User 对象,因为ID是用户的属性。因此,你为什么需要 Dictionary<User, Id> ? 如果你有 Dictionary<Id, User> 你可以给用户一个Id,如果你有这个用户,你应该已经有了这个Id,这样就不需要另一个字典了。

    或者是因为有时您有一个不完整的用户对象,并且没有填充Id?

        3
  •  0
  •   Marcelo Cantos    15 年前

        4
  •  0
  •   rerun    15 年前

    您可以轻松地创建两个词典,因为条目无论如何都是通过引用存储的。但正如其他人所说,如果你有包含ID的用户,你就永远不需要找到ID。

        5
  •  0
  •   Beau Bennett    11 年前