C# 我应该使用什么来存储关联值列表,以便能够检索、修改和保存其中一个元素

C# 我应该使用什么来存储关联值列表,以便能够检索、修改和保存其中一个元素,c#,C#,我是C#的新手,我不知道怎么做 我有一组相关的值 日期值(字符串) valueOne(十进制) 值二(十进制) 我需要能够在某个日期提取值(我可以将dateValue更改为datetime),并在修改valueOne和valueTwo后保存所有值 我是否应该创建一个对象列表,并在列表中循环搜索要修改的值1和值2的正确日期值 最好的解决方案是什么 创建一个类,实例化所有值,然后将它们添加到列表中? 我如何搜索特定日期 我将使用a将映射到包含valueOne和valueTwo的结构 比如: stru

我是C#的新手,我不知道怎么做

我有一组相关的值

日期值(字符串) valueOne(十进制) 值二(十进制)

我需要能够在某个日期提取值(我可以将dateValue更改为datetime),并在修改valueOne和valueTwo后保存所有值

我是否应该创建一个对象列表,并在列表中循环搜索要修改的值1和值2的正确日期值

最好的解决方案是什么 创建一个类,实例化所有值,然后将它们添加到列表中? 我如何搜索特定日期

我将使用a将映射到包含valueOne和valueTwo的结构

比如:

struct Data
{
  public decimal valueOne { get; set; }
  public decimal valueTwo { get; set; }
}

Dictionary<DateTime, Data> map = new Dictionary<DateTime, Data>();

void addToMap(DateTime dt, decimal one, decimal two)
{
  map[dt] = new Data() { valueOne = one, valueTwo = two };
}
struct数据
{
公共十进制值一{get;set;}
公共十进制值二{get;set;}
}
字典映射=新字典();
void addToMap(日期时间dt,十进制1,十进制2)
{
map[dt]=newdata(){valueOne=one,valueTwo=two};
}

为了便于按日期值检索,您可以将a与包含这两个值的a一起使用

Dictionary<string, Tuple<string, string>>
字典
或者a,它基本上是一个字典,可以存储每个键的值集合。

听起来a可能就是您要找的。字典是一种存储键/值对并允许按键快速轻松查找项的方法。该键将是
dateValue
。字典的值可能是包含
valueOne
valueTwo
的类。例如:

var dictionary = new Dictionary<string, Values>();
//Add an item to the dictionary
dictionary.Add("thekey", new Values {ValueOne = 1, ValueTwo = 2});
//Get the item out of the dictionary by key
var values = dictionary["thekey"];
//Update the value of ValueOne for "thekey"
values.ValueOne = 7;
//Print the new value
Console.WriteLine(dictionary["thekey"].ValueOne);

另外,为什么不将
dateValue
存储为DateTime而不是字符串呢?这样,您就可以访问各种用于处理日期和时间的API,例如为显示、算术等设置格式。

在面向对象编程中,您应该用一个类来表示相关的值:

public class MyAssociatedValues // come up with a better name
{
    public DateTime Date{get;set;}
    public decimal Value1{get;set;} // needs a better name
    public decimal Value2{get;set;} // ditto
}
一旦将集合表示为
IEnumerable
(可以是
列表、数组或实现
IEnumerable
的许多其他结构),就可以轻松创建一个
字典
,根据日期为这些值设置关键字

var valuesByDate = values.ToDictionary(v => v.Date);

首先,我会创建一个类(POCO)而不是一个结构,除非你有一个很好的理由来创建一个结构

public class TheClass
{
    public DateTime TheDate { get; set; }
    public decimal ValueOne { get; set; }
    public decimal ValueTwo { get; set; }
}
其次,我会将它们存储在实现IEnumerable(集合类型)的任何有意义的数据结构中。对我来说似乎没有意义的是每个人都在建议的(字典),因为很可能有两个对象的日期时间相同,所以为什么每个人都建议使用字典让我困惑。我唯一能想到的是,他们假设每个datetime只有一对值

第三,使用LINQ根据查询枚举子列表

foreach (var obj in myCollection.Where(item => item.TheDate == requestedDate))
{
    //Do whatever you need to do to each enumerated item.
}

或者,如果您真的想使用字典而不是LINQ,您可以创建一个
IDictionary
,这意味着您正在缓存集合作为字典中的值

foreach (var obj in myDictionary[requestedDate])
{
    //Do whatever you need to do to each enumerated item.
}

请不要在标题前加上“C”。我们使用标签来实现这一目的。
foreach (var obj in myDictionary[requestedDate])
{
    //Do whatever you need to do to each enumerated item.
}