我需要根据字符串,名称和其他一半找到值的一半时间,我需要根据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>
可以解决这个问题吗?我不知道。
请帮助我完成我狭隘的编码经验。 ; _;
答案 0 :(得分:1)
我认为拥有Dictionary<object,Player>
比拥有两个不同的词典更好。它可能需要相同数量的内存(因为每个Player
引用仍将在统一字典中存储两次),可能不太清楚,并且可能(可以想象)导致哈希码冲突问题,因为您的密钥可以是几种不同的类型。
我会保留两个词典,PlayersByName
和PlayersByID
,并在适当的时候使用它们。
答案 1 :(得分:1)
您想知道将来放入词典中的原始数据类型吗?如果没有,您有两种选择:
串类型! - 只需使用string
作为密钥,在添加时,请在整数上调用.ToString()
:)
Be object
ive - 使用object
作为密钥,这样您就可以将任何内容放入其中。
基于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();