首页 > 解决方案 > 从两个 IEnumerable 创建一个 IEnumerable 队列

问题描述

我有两个IEnumerablesstockDatesstockClosing,我想将它们放在一个队列中。

IEnumerable<DateTime> stockDates = stocks.Select(equity => equity.Date);
IEnumerable<decimal> stockClosing = stocks.Select(equity => equity.Close);

// create a queue
Queue<MovingAverage> movingAverageQueue = new Queue<MovingAverage>();

如何添加stockDatesstockClosing到新创建的movingAverageQueue

这是 MovingAverage 类:

namespace myBackEnd.Models
{
public class MovingAverage
{
    public DateTime Date { get; set; }
    public decimal Close { get; set; }

}
}

标签: c#

解决方案


您可以使用IEnumerable.Zip()它,但是由于MovingAverage帖子中没有显示该类,我只使用了示例属性:

movingAverageQueue = stockDates.Zip(stockClosing , (d, c) => new MovingAverage{ Date = d, Average = c});

如果它们都在股票中,并且您希望在某个日期平均收盘,那么您可以这样做:

var result = stocks.GroupBy(x=> x.Date.Date)
             .Select(g => new MovingAverage{ Date = g.Key, Average = g.Average()});

请注意,在stocks.GroupBy(x=> x.Date.Date)asx.Date中是 DateTime,x.Date.Date将是它的日期(没有时间),以便所有具有相同日期的分组都相同。


推荐阅读