按索引获取c#字典的项目?

时间:2014-02-18 22:48:22

标签: c# dictionary

我在团结项目中工作,即时通讯使用字典来存储玩家信息,然后为玩家分配一个userID int,这是我试图在字典中使玩家信息的索引位置,但我想即时通讯试图使用这个系统完全错误。目前我有这个代码:

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类返回数据。

如果有人能帮助我找到一个有效的方法,那就感激不尽了,谢谢。

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

您也可以通过自己将您感兴趣的键值对封装到 KeyValuePair 中并将其与 int 相关联来索引字典值,如下所示:

Dictionary<int, KeyValuePair<string, int>> indexedDictionary = new Dictionary<int, KeyValuePair<string, int>>
    {
        {0, new KeyValuePair<string, int>("my entry", 13) },
        {1, new KeyValuePair<string, int>("whatever", 5) },
        {............}
    };