提问人:user6703592 提问时间:8/12/2016 最后编辑:parsley72user6703592 更新时间:8/12/2016 访问量:63
C# linq 根据以前的数据创建与函数相关的新项
C# linq Create a new item related to a function against previous data
问:
List<History> data = new List<History>(){
new History() {Symbol="a", Close = 1.0m, Date = new DateTime(2016, 2, 1) },
new History() {Symbol="a", Close = 1.2m, Date = new DateTime(2016, 2, 2) },
new History() {Symbol="a", Close = 1.3m, Date = new DateTime(2016, 2, 3) },
new History() {Symbol="b", Close = 1.2m, Date = new DateTime(2016, 2, 1) },
new History() {Symbol="b", Close = 1.2m, Date = new DateTime(2016, 2, 2) },
new History() {Symbol="b", Close = 1.3m, Date = new DateTime(2016, 2, 3) },
};
var StockGroupList = data
.GroupBy(o => o.Symbol)
.OrderBy(o => o.Key)
.ToList();
我想创建一个新的列表,例如
select new { Symbol, Close, Date, Vol};
这是两天的标准差,例如 at 是 for 和 的函数。此外,第一天(例如)的默认值为 。Vol
Vol
Symbol="a"
2016, 2, 3
close
2016, 2, 3
2016, 2, 2
Vol
2016, 2, 1
Vol = 0
预期输出:
List<dynamic> NewData = new List<dynamic>
{
new { Symbol = "a", Close = 1.0m, Date = new DateTime(2016, 2, 1), Vol = 0 },
new { Symbol = "a", Close = 1.0m, Date = new DateTime(2016, 2, 2), Vol = SD(Close of 2016, 2, 1, Close of 2016, 2, 2) },
new { Symbol = "a", Close = 1.0m, Date = new DateTime(2016, 2, 3), Vol = SD(Close of 2016, 2, 2, Close of 2016, 2, 3) },
......
};
你可以简单地说,你可以看作是一个给定的函数。
此外,如果参数是 说 ,那我该怎么办?SD(x,y)
SD(x,y) = x+y
SD
List
List[Close of 2016, 2, 2, Close of 2016, 2, 3)]
如果是以下形式SD
decimal OneStdDev = (decimal)(new DescriptiveStatistics(data.Select(o => (double)o.Close)).StandardDeviation);
我该怎么办?
答:
1赞
Hari Prasad
8/12/2016
#1
我怀疑在这种情况下您是否需要分组,如果我了解您的问题,您想在当前和以前的历史记录之间进行计算。SD
您可以使用扩展方法执行此操作。Linq
var results = data
.Take(1)
.Select(x=>new {x.Symbol, x.Close, x.Date, Vol = 0.0m})
.Concat(data.Zip(data.Skip(1), (first,second) =>
new
{
second.Symbol,
second.Close,
second.Date,
Vol = first.Close + second.Close // Use whatever logic you want.
}
));
输出:
Symbol =a, Close=1.0, Date=2/1/2016 12:00:00 AM, Vol = 0.0
Symbol =a, Close=1.2, Date=2/2/2016 12:00:00 AM, Vol = 2.2
Symbol =a, Close=1.3, Date=2/3/2016 12:00:00 AM, Vol = 2.5
Symbol =b, Close=1.2, Date=2/1/2016 12:00:00 AM, Vol = 2.5
Symbol =b, Close=1.2, Date=2/2/2016 12:00:00 AM, Vol = 2.4
Symbol =b, Close=1.3, Date=2/3/2016 12:00:00 AM, Vol = 2.5
查看此演示
评论
0赞
user6703592
8/12/2016
当数字很大时怎么写,比如说 的参数是 10 天前,前 10 天默认为 0。谢谢SD
close
close
0赞
Hari Prasad
8/12/2016
这是后续问题,我建议发布新问题。如果我们包含的问题比问题中提出的问题更多,可能会使遇到类似问题的人感到困惑。
评论