日期:2014-05-20  浏览次数:20902 次

HashTable 存键值的问题
我现在有 角色名称、道具编号、道具对象。
我需要用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];
                }
            }