2014-02-18 67 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編輯向你展示... –