在c#中管理键值对的最佳方法

时间:2017-07-14 14:04:30

标签: c# mysql asp.net coding-style

有一项要求。我有一个excel导入功能,可以从excel文件向数据库添加数据。我需要在导入之前添加一个过滤器来检查数据。假设有一个像 3:44-5:87-1:345 这样的值。  在导入之前,我需要验证这些数据是否有效 -

- > 3,5,1应存在于表T1

- > 44,87,345,应存在于表T2中。

如果两个条件匹配数据都应该验证为正确

目前的代码就像

string test = "3:44-5:87-1:345";
var attributes = test.Split(new[] { "-" },
     StringSplitOptions.RemoveEmptyEntries);

 if (attributes.Length != 0)
 {
     foreach (var attribute in attributes)
     {
         var attArray = attribute.Split(new[] { ":" },
             StringSplitOptions.RemoveEmptyEntries);

         if (attArray.Length >= 2)
         {
            int key = Convert.ToInt32(attArray[0].ToString())
             int value = Convert.ToInt32(attArray[1].ToString())

            //Call db to check if key exist
            if(KeyExist)
            {
             //Call db to check if value exist for the key
             if(ValueExist)
             {
             //CODE here to import data to datatabse
             }
            }
         }
     }

 }

对于上面的样本数据,它将调用3个Key(3,5,1)和3个3值调用(44,47,345)。因此,如果excel表中有100行,我可能会在数千个DB调用中结束。 如何优化它?

1 个答案:

答案 0 :(得分:0)

如果在Excel工作表中多次出现键和值,则可以使用词典加快逻辑运算:

Dictionary<int, bool> keys = new Dictionary<int,bool>();
Dictionary<int, bool> values = new Dictionary<int,bool>();
string test = "3:44-5:87-1:345";
var attributes = test.Split(new[] { "-" },
     StringSplitOptions.RemoveEmptyEntries);

 if (attributes.Length != 0)
 {
     foreach (var attribute in attributes)
     {
         var attArray = attribute.Split(new[] { ":" },
             StringSplitOptions.RemoveEmptyEntries);

         if (attArray.Length >= 2)
         {
            int key = Convert.ToInt32(attArray[0].ToString())
            int value = Convert.ToInt32(attArray[1].ToString())

            if(!keys.Contains(key))
            {
                keys.Add(key, keyExists(key));
            }

            if(!values.Contains(value))
            {
                values.Add(value, valueExists(value));
            }

            if(keys[key])
            {
               if(values[value])
               {
                  //CODE here to import data to datatabse
               }
            }
         }
     }
 }

如果你的输入字符串是:

string test = "3:44-5:87-1:345-3:87-5:345-1:44";

与原始方法相比,使用字典的方法会将数据库查找减少一半。