提问人:user6703592 提问时间:8/11/2016 最后编辑:ekaduser6703592 更新时间:6/19/2017 访问量:890
如何将 C# linq 中的 groupby 视为二维列表?
how to regard groupby in C# linq as a two dimensional list?
问:
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();
在“2016, 2, 2”调用“a”的“Close”值的最简单方法是什么,是否可以使用类似 StockGroupList[0][1].close 的东西?
此外,如何订购第二维度?例如,对于每个“符号”,按日期顺序排序?
答:
1赞
Dmitry Bychenko
8/11/2016
#1
尝试执行两次操作:针对每个组中的项目和整个所有组.ToList()
var StockGroupList = data
.GroupBy(o => o.Symbol)
.OrderBy(chunk => chunk.Key)
.Select(chunk => chunk
.OrderBy(item => item.Date) // ordered by the sequence of date
.ToList()) // items in a group should be represented as List
.ToList(); // groups should be represented as List
评论
1赞
Gilad Green
8/11/2016
例如,对于每个“符号”,按日期顺序排序 - 还为OrderBy
chunk.ToList()
-
0赞
Dmitry Bychenko
8/11/2016
@Gilad Green:谢谢!你忽略了这句话
0赞
Gilad Green
8/11/2016
你比我早一刻发布了它 - 所以只是把它作为评论而不是回答:)
0赞
user6703592
8/11/2016
谢谢!如果我想创建一个新的列表,例如 select new { Symbol, Close, Date, Vol};这里的“Vol”是两天的标准差,例如“2016, 2, 3”处的 Symbol=“a” 的 Vol 是“2016, 2, 3” 和 “2016, 2, 2” 的“收盘价”的函数。此外,第一天的 Vol(例如“2016, 2, 1”)默认为 Vol = 0。
2赞
qxg
8/11/2016
#2
让我们向后编写代码。
要使 StockGroupList[0][1] 工作,StockGroupList 的类型应为 。List<List<History>>
var StockGroupList = data
... // Should be type IEnumerable<List<History>>
.ToList();
=>
var StockGroupList = data
.Select( o => o.ToList()) // Should be ordered by Date
.ToList();
=>
var StockGroupList = data
... // Should be IEnumerable<IEnumerable<History>>
.Select( o => o.Orderby(c => c.Date).ToList())
.ToList();
因为 ,最终代码是IGrouping<out TKey, out TElement> : IEnumerable<TElement>
var StockGroupList = data
.GroupBy(o => o.Symbol)
.OrderBy(o => o.Key)
.Select(o => o.OrderBy(x => x.Date).ToList())
.ToList();
您可以替换为以获得相同的效果。ToList
ToArray
上一个:C# 用于二维列表的循环
评论