【发布时间】:2014-11-10 16:11:18
【问题描述】:
我有一个包含股票信息的 CSV(我有一个名为 stockValues 的 DailyValues 对象列表),我需要从中提取。它看起来像这样:
Date,Open,High,Low,Close,Volume,Adj Close
2012-11-01,77.60,78.12,77.37,78.05,186200,78.05
2012-10-31,76.96,77.75,76.96,77.47,290700,77.47 //and so on
基本上,我需要使用 LINQ 在 CSV 中找到每年的平均交易量。我可以做到,但它很草率而且只能工作一年,所以我必须每年复制该段多次(它有 1993-2012 年)。这是我所拥有的:
List<DailyValues> values2012 = stockValues.TakeWhile(n => n.Date.Year == 2012).ToList();
List<decimal> sum2012 = (from s in values2012
select s.Volume).ToList();
decimal average2012 = 0;
foreach(decimal el in sum2012)
{
average2012 += el;
}
average2012 /= sum2012.Count();
average2012 = decimal.Round(average, 2);
Console.WriteLine("2012 Average: " + average2012);
所以,再一次,这很好用,但我不想每年都这样做。有人知道简化我的问题的方法吗?
【问题讨论】:
-
为什么不简单地将
Predicate<T>传递给您的TakeWhile子句?每个谓词可以是不同的年份。还是你真的想多年执行一次你的方法? -
您想同时获取所有年份的平均值还是仅获取特定年份的平均值?
-
我不知道
Predicate<T>做了什么,所以我必须查一下,但我确实需要打印一行说明每年的平均值,如果这能回答您的问题。 -
@juharr 打印一行,说明每个特定年份的平均值是的。
-
以下答案应该适用于所有日期。