zoukankan      html  css  js  c++  java
  • 巧用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的键值对。
  • 相关阅读:
    洛谷 1339 最短路
    洛谷 1330 封锁阳光大学 图论 二分图染色
    洛谷 1262 间谍网络 Tarjan 图论
    洛谷 1373 dp 小a和uim之大逃离 良心题解
    洛谷 1972 莫队
    洛谷 2158 数论 打表 欧拉函数
    洛谷 1414 数论 分解因数 水题
    蒟蒻的省选复习(不如说是noip普及组复习)————连载中
    关于筛法
    关于整数划分的几类问题
  • 原文地址:https://www.cnblogs.com/txqx/p/8487747.html
Copyright © 2011-2022 走看看