巧用Dictionary,完成客户需求

时间:2024-04-24 23:38:38

前几天与客户沟通一个项目,客户对其中某个模块提了一个需求。

把从数据库中取出的对物品的统计重新拆分重新统计。鉴于用文字不能清除的表达需求,我将该需求画出来,便于理解。

需求如下图:

巧用Dictionary<TKey,TValue>,完成客户需求

就是A,B,C D,四种不同的物品原来是组合统计的,现将其拆分开来各自统计。

我刚开始想着是:通过SQL语句,进行逻辑处理,完成该项需求,想了半天,不得要领。

后来看到导师运用:Dictionary<TKey,TValue>完美将这个需求实现,我受益颇深,故总结其思路,给大家呈现出来。

废话不多说了,开始解决:

1.执行查询语句,从数据库中取出数据,返回 OracleDataReader

OracleDataReader odr = (此处为从数据库中获取数据的代码,省略)。

2.定义两个Dictionary(string,int)集合

Dictionary<string,int> dicSrc = new Dictionary<string,int>();//用来存储原集合

Dictionary<string,int> dicParse = new Dictionary<string,int>();//用来存储目标集合

3.逻辑实现

while(odr.Read())

{

//将原数据表中的物品,数量取出,按键值对放入到集合dicSrc中

dicSrc.Add(ord["物品"].ToString(),int.Parse(odr["数量"].ToString()));

}

odr.Close();

foreach(KeyValuePair<string,int> dic in dicSrc)//循环原集合

{

  string[] thickness = dic.Key.Split(new char[] {'+'});拆解集合项,并放入到字符串集合,如A+B=>A,B

  foreach (string str in thickness)//循环字符串集合

{

    if(dicParse.Keys.Contains(str))//获取的物品已存在目标集合中

    {

    //更新物品数量 = 原数量 + 新添加的数量

    dicParse[str] = dicParse[str] + dic.value

    }

else

{

//将键值对的值加入到目标集合中

    dicParse.Add(str,dic.Value);

    

    }

}

}

经过以上处理,便可将原数据整理成为客户所需求的数据(dicParse)。

以上方法只是核心代码,其他代码不做陈述,望各位看官理解。希望这个思想能帮到大家。

知识点滴:

KeyValuePair 和 Dictionary 的关系
1、KeyValuePair 
    a、KeyValuePair 是一个结构体(struct);
    b、KeyValuePair 只包含一个Key、Value的键值对。
2、Dictionary 
    a、Dictionary 可以简单的看作是KeyValuePair 的集合;
    b、Dictionary 可以包含多个Key、Value的键值对。