我创建了一个字典,包括DateTime作为Key和Value的自定义类。
class Class2
{
public decimal Value1 { get; set; }
public decimal Value2 { get; set; }
public decimal Value3 { get; set; }
}
class TestClass
{
public static void Main(string[] args)
{
var dict = new Dictionary<DateTime, Class2>();
dict.Add(new DateTime(2014, 6, 1), new Class2() { Value1 = 1, Value2 = 2, Value3 = 3 });
dict.Add(new DateTime(2014, 6, 2), new Class2() { Value1 = 4, Value2 = 5, Value3 = 6 });
dict.Add(new DateTime(2014, 6, 3), new Class2() { Value1 = 10, Value2 = 20, Value3 = 40 });
dict.Add(new DateTime(2014, 6, 4), new Class2() { Value1 = -5, Value2 = -6, Value3 = -8 });
// form a list consisting of Value1 and pass this list to a function for processing
}
}
在注释行中,我想为Value1选择一些特定的数据点并形成一个列表。这些数据点选择标准将基于时间(这就是我需要DateTime字段的原因)。此列表将传递给另一个函数以供进一步处理。
我的问题是双重的:
我应该使用词典来存储这种数据吗?我见过其他帖子,有些人正在谈论使用SortedList。我要添加到这些容器类的数据将按时间顺序排列。
创建列表(Value1)的最佳做法是什么?我本可以从头开始创建一个单独的列表,但我想知道除了这个之外是否有更好的替代方案(假设我已经存储在Dictionary实例中的数据中)。
答案 0 :(得分:2)
使用SortedDictionary<TKey, TValue> Class
。
SortedDictionary<DateTime, Class2> dict = new SortedDictionary<DateTime, Class2>();
documentation之后的问题解释了使用SortedList
与SortedDictionary
SortedDictionary<TKey, TValue>
泛型类是二进制搜索 检索O(log n)
的树,其中n是元素的数量 词典。在这方面,它类似于SortedList<TKey, TValue>
泛型类。这两个类有相似之处 对象模型,都有O(log n)检索。哪两个班 内存使用和插入和移除速度不同:
SortedList<TKey, TValue>
使用的内存少于SortedDictionary<TKey, TValue>
。
SortedDictionary<TKey, TValue>
对未排序数据的插入和删除操作更快:O(log n)而不是SortedList<TKey, TValue>
的O(n)。如果列表是从排序数据中一次性填充的,则
SortedList<TKey, TValue>
比SortedDictionary<TKey, TValue>
快。
对于你的问题:
创建列表(Value1)的最佳做法是什么?
List<decimal> list = dict.Values.Select(r=> r.Value1).ToList();
征求意见:
如何形成一个由Values1组成的列表,比如说,过去3天
List<decimal> listOfValue1 = dict.Where(r=> r.Key >= DateTime.Today.AddDays(-3)
&& r.Key <= DateTime.Today)
.Select(r=> r.Value.Value1)
.ToList();