我正在统一进行一个项目,我使用字典来存储玩家信息,然后将 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# 中使用字典,我发现很难理解它们是如何工作的,如果有人能帮助我找到一种这样做的工作方法。我需要做的就是根据其索引或使用 NetworkPlayer 类返回数据。

如果有人能帮助我找到一种工作方法来做这个 id 不胜感激,谢谢。

最佳答案

标准字典的项目不会以这种方式排序。通常情况下,如果你想通过特定的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 属性你的下一个身份。

关于c# - 通过索引获取c#字典的项目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21867158/

10-17 00:04