• 巧用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的键值对。
  • 相关阅读:
    散列
    AVL树的单旋与双旋
    Ubuntu系统目录
    os x文件系统结构简介
    c语言静态局部变量
    创建J2EE 5.0工程后,JSTL不能使用解决方法
    mysql
    指针
    servlet 访问项目
    c数组
  • 原文地址:https://www.cnblogs.com/txqx/p/8487747.html
Copyright © 2020-2023  润新知