我有一个清单:

List<BtnCountViews> btnCountViewsList;


BtnCountViews类如下所示:

public class BtnCountViews
{
    public int DayOfYear { get; set; }
    public int BtnCount { get; set; }
    public int Views { get; set; }
}


我有一个非常不寻常的要求,我不确定如何着手执行它。

我想做的是在btnCountViewsList中用BtnCountViews填充缺少的DayOfYear,其对象的BtnCount为0且Views为0。

首先,可以告诉我如何在btnCountViewsList中找到最小和最大DayOfYear。注意我用LINQ标记了它,但是我不确定这是否是最好的工具。

如果有人可以提出一种方法来填充丢失的对象,这也将很高兴,但这并不是这个问题的重点,因为我认为我需要首先了解如何获得最小和最大。

最佳答案

您可以添加缺少的日子而无需明确找到minmax


DayOfYear升序对列表进行排序(how?
在列表的末尾开始循环索引i,然后向后移动; i达到零时停止
比较DayOfYearii-1属性
如果两天相差一天,请移至下一个i
否则,插入一个新记录,将DayOfYear设置为btnCountViewsList[i]减一。


在此过程结束时,您的列表将包含每个DayOfYear值的条目。这是一个示例实现:

items.Sort((x, y) => x.DayOfYear.CompareTo(y.DayOfYear));
Console.WriteLine("Before: {0}", string.Join(", ", items.Select(x => x.DayOfYear)));
int i = items.Count-1;
while (i > 0) {
    if (items[i].DayOfYear == items[i-1].DayOfYear+1) {
        i--;
    } else {
        items.Insert(i, new BtnCountViews { DayOfYear = items[i].DayOfYear-1 });
    }
}


Demo.

10-07 20:21