字典中键的多个选项?

时间:2012-05-29 17:48:36

标签: c# .net dictionary

我需要根据字符串,名称和其他一半找到值的一半时间,我需要根据int(用户ID)找到一个值。

目前我有两个字典来解决这个难题 - 一个使用字符串作为键,一个使用int作为键。我想知道是否有更有效的方法来实现这一点 - 一种基于int 字符串获取值的方法。

    public static Dictionary<int, Player> nPlayers = new Dictionary<int, Player>();
    public static Dictionary<string, Player> sPlayers = new Dictionary<string, Player>();

在扫描其他问题后,有人提到使用字典词典。如果有人可以详细说明这一点(如果这是我正在寻找的解决方案),那将是宏伟的

我对元组知之甚少,但据我所知,需要两个键,而我正在寻找的是一个或另一个。

Dictionary<object, Player>可以解决这个问题吗?我不知道。

请帮助我完成我狭隘的编码经验。 ; _;

4 个答案:

答案 0 :(得分:1)

我认为拥有Dictionary<object,Player>比拥有两个不同的词典更好。它可能需要相同数量的内存(因为每个Player引用仍将在统一字典中存储两次),可能不太清楚,并且可能(可以想象)导致哈希码冲突问题,因为您的密钥可以是几种不同的类型。

我会保留两个词典,PlayersByNamePlayersByID,并在适当的时候使用它们。

答案 1 :(得分:1)

您想知道将来放入词典中的原始数据类型吗?如果没有,您有两种选择:

  1. 串类型! - 只需使用string作为密钥,在添加时,请在整数上调用.ToString():)

  2. Be object ive - 使用object作为密钥,这样您就可以将任何内容放入其中。

  3. 基于2,我推荐第一个,因为你仍然有某种类型限制。

    如果您确实想知道未来的原始数据类型 - 您的实施很好:)

答案 2 :(得分:1)

您的解决方案(2个词典)是正确的。字典只能由一个稳定键索引。因此,您必须使用不同的键来保持单独的词典索引。

答案 3 :(得分:1)

根据您在用户登录系统时的注释,您将其添加到字典中,此处您必须添加到这两个词典。

我认为你可以用另一种方式做到这一点,

   public static List<Player> nPlayers = new List<Player>();

这只是你需要的,在他们登录时添加玩家。

如果您想按ID,名称或其他任何方式搜索nPlayers并找到播放器。

 var playerByID = nPlayers.Where(p= p.ID==givenID).FirstOrDefault();

 var playerByName = nPlayers.Where(p= p.Name==givenName).FirstOrDefault();