在字典中查找元素 - C#

时间:2017-02-08 05:49:36

标签: c# dictionary

输入数据如下所示:

enter image description here

正如您所看到的,在1/1/2017处,喷油器I1连接到四个井筒,并且有一些因素。在日期1/2/2017,I1连接到三个井筒,各个因子。

我需要在特定日期获取模式因子值。例如1/1/2017, 例如,当用户提到I1和P2时。

我认为它可能有用的方法是使用Dictionaries,使First first as:

  • keyDate
  • valueDictionary<injector,list<wellbores>>

和另一个字典:

  • key: Date
  • valueDictionary<injector,list<factors>>

如何填充相应的词典并访问数据 日期:1/1/2017和注射器 - 井眼组合i1-p2。 我使用正确的方法吗?

表结构或输入数据是如何呈现的。它没有任何问题。

2 个答案:

答案 0 :(得分:1)

我会使用词典

但您可以通过密钥读取您的值 我会给出一个通用的例子

使用就像这样

你可以使用任何类型的

int myValue1 = GetValue<int>("your key", your Dictionary);
bool myValue2 = GetValue<bool>("your key", your Dictionary);
string myValue3 = GetValue("your key", your Dictionary);


  public static T GetValue<T>(String paramName, Dictionary<string, string> param = null) where T : new()
        {
            Type myTypeObj = null;
            T MyT = new T();
            if (MyT == null)
            {
                myTypeObj = typeof(T);
                myTypeObj = myTypeObj.GetProperty("Value").PropertyType;
            }
            else
            {
                myTypeObj = MyT.GetType();
            }

            MethodInfo myMethodInfo = myTypeObj.GetMethod("Parse", new[] { typeof(string) });
            string value = "";
            if (param.ContainsKey(paramName))
            {
                value = param[paramName];
                if (!string.IsNullOrEmpty(value))
                {
                    object[] reflParm = { value };
                    return (T)myMethodInfo.Invoke(MyT, reflParm);
                }
            }
            return default(T);
        }

        public static String GetValue(String paramName, Dictionary<string, string> param = null)
        {
            string value = "";
            if (param.ContainsKey(paramName))
            {
                value = param[paramName];
                if (!string.IsNullOrEmpty(value))
                    return value;
            }
            return String.Empty;
        }

在您的情况下,您应该按键返回列表,然后您将获得列表,然后您可以随心所欲地做任何事情

我希望我能提供帮助

答案 1 :(得分:1)

如果您可以将数据作为列表获取,并且用户输入InjectorWellbore值,那么为什么不使用LINQ来获取所需的对象。我将它实现为 -

的方式
public class Data {
     public string Injector {get;set;}
     public string Wellbore {get;set;}
     public DateTime Date   {get;set;}
     public double Factor   {get;set;}
}

然后将项目加载到列表中(Using NHibernate or EntityFramework or plain old ADO.Net wrapper class to read DataTable and load into a list.) -

var itemList = .....load items from database in list of type `List<Data>`. 

如果用户提供的值为I1P1,则为

var item = itemList.FirstOrDefault(x => x.Injector == I1 && x.Wellbore == P1);

现在item.Factor是我正在寻找的因素。