这高于我在Linq的技术水平,所以我来这里寻求帮助。这段代码有效,但我认为它可以运行得更快,占用更少的空间。
private List<DateTime> GetUniqueTimeStamps()
{
List<DateTime> timeStamps = new List<DateTime>();
foreach (KeyValuePair<string, Instrument> kvp in Instruments)
{
foreach (Bar bar in kvp.Value.Bars)
{
timeStamps.Add(bar.Time);
}
}
return timeStamps.Distinct().ToList();
}
如何使用linq跳过所有循环并跳转对象属性以获取唯一的DateTime值?
答案 0 :(得分:2)
使用SelectMany
展平列表,然后Select
获取时间:
Instruments.SelectMany(kvp => kvp.Value.Bars).Select(b => b.Time).Distinct().ToList();
请注意,这并不是更有效率(由于ToList
,您甚至没有利用延迟枚举)。然而,它更短,更容易阅读。