【发布时间】:2015-06-17 06:28:06
【问题描述】:
我有一个这样的排序列表;
public MeasuredValues as SortedList(Of DateTime, Double)
我输入了一堆值。例如;
MeasuredValues.add(New DateTime(2010, 1, 1),33)
MeasuredValues.add(New DateTime(2011, 1, 1),13)
MeasuredValues.add(New DateTime(2012, 1, 1),233)
MeasuredValues.add(New DateTime(2013, 1, 1),331)
MeasuredValues.add(New DateTime(2014, 1, 1),732)
MeasuredValues.add(New DateTime(2015, 1, 1),123)
现在我想得到这个值的平均值,比如从 2011 年到 2013 年。(当然我的真实情况有更多的值)
我已经看到 sortedlist 有一个名为 'Avarage' 的扩展方法; https://msdn.microsoft.com/en-us/library/bb534965(v=vs.110).aspx
但我找不到任何明确的例子。我喜欢 VB.NET,但也欢迎使用 C# 示例...
我知道我需要实现一个功能,但我不知道怎么做。 MSDN 没有提供任何示例。另外,这是最好/最快的方法吗?还是有更好的选择...
提前谢谢...
更新: 我试过这个;
Dim MyAverage As Double = MeasuredValues.Average(Function(measure) CDate(measure.Key) >= ThisStepBeginTime And CDate(measure.Key) <= ThisStepEndTime)
但它只提供偶尔的 -0,1
这个'单行函数'对我来说是新的,我做错了什么?
更新 2: 我的例子是真正问题的一个过于简单的例子。我正在尝试绘制一个图表,其中每个像素代表一个时间跨度。像这样;
For XCounter As Integer = 0 To MyBase.Width
Dim ThisStepBeginTime As DateTime = First.AddTicks(XCounter * TimeStep.Ticks)
Dim ThisStepEndTime As DateTime = First.AddTicks((XCounter + 1) * TimeStep.Ticks)
For Each MySerie In Me.AllSeries.Values
Dim MyAverage As Double = MySerie.Where(Function(measure) CDate(measure.Key) >= ThisStepBeginTime And CDate(measure.Key) <= ThisStepEndTime).Average(Function(measure) measure.Value)
e.Graphics.DrawLine(Pens.Red, XCounter, CInt((Me.Height / MySerie.HighestValue) * MyAverage), XCounter, 0)
Next
Next
这会导致;
Sequence contains no elements
因为有些步骤没有价值......
【问题讨论】:
标签: vb.net average sortedlist