2014-02-18 43 views
2

我在一个项目统一工作,即时通讯使用字典来存储玩家信息,然后分配一个用户ID int到玩家这是什么即时尝试使字典中的球员信息的索引位置,但我想即时尝试使用这个系统是完全错误的。目前,我有这样的代码:通过索引获取c#词典的项目?

public class Players : IComparable<Players> { 
public int userID; 
public string userName; 
public int userHealth; 
public GameObject userPlayer; 

public Players(int newID,string Name,int Health,GameObject player){ 
     userID = newID; 
     userName = Name; 
     userHealth = Health; 
     userPlayer = player; 
    } 

    public int CompareTo(Players other){ 
     if(other == null){ 
      return 1; 
     } 
     return userID - other.userID; 
    } 
} 

创建我使用

private Dictionary<NetworkPlayer, Players> playerList = new Dictionary<NetworkPlayer,Players>(); 

要添加到它的词典我使用

playerList.Add(player,new Players(playerList.Count,"Test", 100, playerObj));

我希望使用playerList.Count一部分一个索引它的方法,然后通过这个索引对它进行排序以获得我想要的玩家回来......有没有一种方法可以正确地做到这一点?这是我第一次尝试在c#中使用dictionarys,并且我发现很难理解它们是如何工作的,如果有人能够帮助我找到一个工作方法来做到这一点。我所需要做的就是根据索引或使用NetworkPlayer类来返回数据。

如果有人可以帮助我引导一个工作方法来做这个id感激,谢谢。

+0

['OrderedDictionary'](http://msdn.microsoft.com/en-us/library/system.collections.specialized.ordereddictionary(v = vs.110).aspx)也许? –

+0

你应该看看SortedDictionary类。 http://msdn.microsoft.com/en-us/library/ms132289(v=vs.110).aspx –

+0

@TimSchmelter哇我发现有序列表,但我不知道有一个有序的字典...谢谢,看起来很完美!我愚蠢。 –

回答

4

标准字典的项目不以这种方式排序。通常情况下,如果你想拉出来一个特定ID的玩家,这将是更明智的是,在字典中的关键,即:

,你可以保存两本字典,一个针对每种形式
private Dictionary<int, Players> playersByID = new Dictionary<int, Players>(); 
private Dictionary<NetworkPlayer, Players> playersByNetwork = new Dictionary<NetworkPlayer, Players>(); 

注查询:

然后,您可以储存:

int id = nextID; // Using ID counter... 

var newPlayer = new Players(id, "Test", 100, playerObj); 
playersById.Add(id, newPlayer); 
playersByNetwork.Add(player, newPlayer); 

,并获取通过:

var player = playersById[120]; 

或者通过:

var player = playersByNetwork[netPlayer]; 

在一个侧面说明:我没有使用Count作为ID,因为,如果你曾经删除玩家会失败......如果这是你永远不会做你的系统,你可以回到使用Count属性为你的下一个ID。

+0

但我也需要能够通过NetworkPlayer类获得播放器 –

+0

@JamesTrotter一个常用的技巧是在这种情况下使用两个字典。 –

+0

@JamesTrotter编辑向你展示... –