我正在统一进行一个项目,我使用字典来存储玩家信息,然后将 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/