【问题标题】:How to conserve the Dictionary structure after the filtration of linqlinq过滤后如何保存字典结构
【发布时间】:2017-09-10 06:38:00
【问题描述】:
public class MyClass
{
    public DateTime Date;
    public string Symbol { get; set; }
    public decimal Close { get; set; }
}

假设

Dictionary<string, List<MyClass>> A 

我想用linq过滤每个Symbol(最近N天的数据)的Date,但我想在过滤后保留Dictionary&lt;string, List&lt;MyClass&gt;&gt;结构。

我能做的就是再次构建Dictionary

Dictionary<string, List<MyClass>> C = new Dictionary<string, List<MyClass>>();
var temData = A.Select(o => o.Value.Where(p => p.Date < today).Take(N)).SelectMany(o => o).GroupBy(o => o.Symbol);
foreach (var item in temData)
{
    C.Add(item.Key, item.ToList());
}

有没有像ToDictionary 这样的简单方法来构建结果?

【问题讨论】:

  • @GiladGreen 抱歉,请更新 A 是 B。
  • 关键是什么?已经是Symbol了吗?只是C里面有过滤项,这两个字典基本一样吗?
  • @GiladGreen 是的,关键仍然是Symbol,我想建立一个新字典但不重写A.

标签: c# linq dictionary


【解决方案1】:

由于您的原始字典已经由 Symbol“分组”,因此只需从中投影一个新字典,但过滤 Value 集合:

A = C.ToDictionary(pair => pair.Key, 
                   pair => pair.Value.Where(i => i.Date < today).Take(N).ToList());

请注意,如果您想要 N 最近的商品,那么您还需要先订购它们:

pair.Value.Where(i => i.Date < today).OrderByDescending(i => i.Date).Take(N).ToList()

【讨论】:

    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多