如果你有一个集合:
public class TestObj
{
public DateTime Key { get; set; }
public int MyProperty { get; set; }
public int MyProperty2 { get; set; }
}
该集合可能包含20,000个TestObj对象。我需要使用linq
Key
DateTime
上的DateTime t1
进行查询DateTime t2
至Add
。
我也想从集合中插入和删除。
我看到SortedList有Remove
和SortedList
方法。 List<T>
有效处理此问题的方法吗?我认为t1
必须遍历整个列表才能确保使用t2
和{{1}}获取所有对象。
答案 0 :(得分:2)
您不应过分担心列表的性能。 20,000没什么。如果你有一个包含数十亿个元素的列表,那么它可能会出现问题,但即使这样,优化也会导致比它解决的问题更多的问题。
如果您想确保无关紧要,可以自行测试:
var l = new SortedList<DateTime, TestObj>();
var key = new DateTime(1995, 1, 1);
for (var i = 0; i < 20000; i++)
{
var o = new TestObj();
o.Key = key;
key = key.AddDays(1);
l.Add(o.Key, o);
}
var sw = new Stopwatch();
var date1 = new DateTime(1995, 5, 5);
var date2 = new DateTime(2010, 5, 5);
sw.Start();
var between = l.Where(x => x.Key >= date1 && x.Key <= date2).ToArray();
Console.WriteLine(between.Count());
sw.Stop();
Console.WriteLine(sw.Elapsed);
输出是:
5480
(过滤掉的元素数量)和
00:00:00.0142387
(你甚至不会注意到)