从两个IEnumerable创建一个IEnumerable队列

时间:2018-11-13 11:15:55

标签: c#

我有两个stockDatesstockClosingIEnumerable<DateTime> stockDates = stocks.Select(equity => equity.Date); IEnumerable<decimal> stockClosing = stocks.Select(equity => equity.Close); // create a queue Queue<MovingAverage> movingAverageQueue = new Queue<MovingAverage>(); ,我想放在一个队列中。

stockDates

如何将stockClosingmovingAverageQueue添加到新创建的namespace myBackEnd.Models { public class MovingAverage { public DateTime Date { get; set; } public decimal Close { get; set; } } } 中?

这是MovingAverage类:

^(?:(?:^|\.)(?:2(?:5[0-5]|[0-4]\d)|1?\d?\d)){4}$

3 个答案:

答案 0 :(得分:1)

您可以为此使用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)中,由于x.Date是一个DateTime,x.Date.Date将是其日期(没有时间),因此所有具有相同日期的分组都将相等。

答案 1 :(得分:0)

您可以使用队列构造器Queue(ICollection)

之一
new Queue<MovingAverage>(stocks.Select(stock => new MovingAverage(...))

答案 2 :(得分:0)

如果movingAverageQueue是已经存在的Queue,则可以仅在Stocks [Enumerable].Enqueue()上使用ForEach新的MovingAverage对象:

stocks.ForEach(s => movingAverageQueue.Enqueue(new MovingAverage { Date = s.Date, Close = s.Close }));