问下我这个代码可以改写成那种就算添加新物品类型也不需要修改的吗

三页菌 2018-05-04 05:07:59
            //============================模拟数据==================================//
Dictionary<string, Dictionary<string, object>> dic_dic = new Dictionary<string, Dictionary<string, object>>();
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("name", "回复剂");
dic.Add("type", "药");
dic_dic.Add("0", dic);
Dictionary<string, object> dic2 = new Dictionary<string, object>();
dic2.Add("name", "以太");
dic2.Add("type", "药");
dic_dic.Add("1", dic2);
Dictionary<string, object> dic3 = new Dictionary<string, object>();
dic3.Add("name", "斧子");
dic3.Add("type", "武器");
dic_dic.Add("2", dic3);
//===================================================================//


Dictionary<string, List<Dictionary<string, object>>> allDic = new Dictionary<string, List<Dictionary<string, object>>>();

List<Dictionary<string, object>> medList = new List<Dictionary<string, object>>();//药品list
List<Dictionary<string, object>> weaList = new List<Dictionary<string, object>>();//武器list

for (int i = 0; i < dic_dic.Count; i++)
{
Dictionary<string, object> d = dic_dic.Values.ElementAt(i);
for (int j = 0; j < d.Count; j++)
{
if (d.Values.ElementAt(j) == "药")
{
medList.Add(d);
}
else if (d.Values.ElementAt(j) == "武器")
{
weaList.Add(d);
}
}
}
allDic.Add("药", medList);
allDic.Add("武器", weaList);


我想把dic_dic里面的物品数据根据物品的类型进行分类,分类完之后,再把他们存放在一个大字典allDic里面
然后我就这样写了,但是一个问题就是这样写,如果后面数据加了新类型的话,我就要加新的list
能改成后面无论加什么类型的物品,我这边的代码都可以不用动吗?(里面用linq检索就更好了)
...全文
451 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
三页菌 2018-05-05
  • 打赏
  • 举报
回复
引用 2 楼 q107770540 的回复:
few suggestion: 1. use `class` instead of `Dictionary<string, object>` 2. even use `Dictionary<string, string>` is much better than `Dictionary<string, object>`
非常感谢,我再研究下
三页菌 2018-05-05
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
一个 Dictionary<string,T>这里的T是父类(包括接口)或者泛型约束于父类(包括接口),这就是设计的意思。如果不会抽象,就不会设计。
这个数据其实是读表自动生成的,本来做了类构造存储,然后他的这个需求变动太快,经常给我加减字段,还要做成热更的,索性后面就没有去构造类了,直接用这个传递lua做数据读取
  • 打赏
  • 举报
回复
接口、抽象类型、Virtual 扩展,继承和多态技术,这是面向对象技术的最基本的概念。不知道最基础的继承和多态的人,不从基础出发,大概就知道玩反射和注入之类的概念而实际上又不能落地了。
  • 打赏
  • 举报
回复
一个 Dictionary<string,T>这里的T是父类(包括接口)或者泛型约束于父类(包括接口),这就是设计的意思。如果不会抽象,就不会设计。
q107770540 2018-05-05
  • 打赏
  • 举报
回复
few suggestion: 1. use `class` instead of `Dictionary<string, object>` 2. even use `Dictionary<string, string>` is much better than `Dictionary<string, object>`
q107770540 2018-05-05
  • 打赏
  • 举报
回复
			Dictionary<string, List<Dictionary<string, object>>> allDic = dic_dic.GroupBy(x=>x.Value["type"])
							  												     .Select(g=> new {key=g.Key, value = g.Select(s=>s.Value)})
							   													 .ToDictionary(v=> v.key.ToString(), v=>v.value.ToList());

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧