我现在有 角色名称、道具编号、道具对象。
我需要用HashTable 存在一起,比如 同一个玩家,道具编号是一样,那么数量需要累加。我贴源码给高手看下
if(ht.ContainsKey(cha_name)
{
HashTable temp = (HashTable)ht[cha_name];
if(temp.ContainsKey(sitem.sID))
{
SItemGrid _grids = (SItemGrid)ht2[sitem.sID];
_grids.sNum += sitem.sNum;
continue;
}
ht2.Add(sitem.sID,sitem);
ht[cha_name] = ht2;
continue;
}
if(ht2.Count == 0)
{
ht2.Add(sitem.sID,sitem);
}
ht.Add(cha_name,ht2);
------解决方案--------------------
不是很明白楼主的代码,hashtable保存的都是object的key,value,如果你只是保存数量。每次操作都需要装箱,拆箱操作。要是这个游戏玩的人多,那性能也不好,还不如改用字典。
- C# code
//用户道具保存字典 Dictionary<string, Dictionary<int, int>> userProps = new Dictionary<string, Dictionary<int, int>>(); //如果是循环处理,那么可以把循环放在if外面就可以了 //判断是否存在用户,假设用户名就是userName if (userProps.ContainsKey("userName")) { Dictionary<int, int> props = userProps["userName"]; //判断道具ID是否在道具列表中,我们假设道具ID是0 if (props.ContainsKey(0)) { //如果道具ID已经在道具列表中,该道具的数量等于已经存在的道具数量加新有的道具数量,比如新的道具为100个,具体时候用变量代替就可以了 props[0] = props[0] + 100; } else { props.Add(0, 100);//如果道具在道具列表中不存在,那么把道具加入到道具列表中 } } else//针对用户不存在的操作,需要先添加用户,再添加道具列表 { //添加用户及道具列表 userProps.Add("userName", new Dictionary<int, int>()); //接下来添加道具到用户下面 userProps["userName"].Add(0, 100); }//获取用户某个道具数量 int propsCount=0; if (userProps.ContainsKey("userName")) { Dictionary<int, int> props = userProps["userName"]; if (props.ContainsKey(0)) { propsCount = props[0]; } }