我有一个清单:
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标记了它,但是我不确定这是否是最好的工具。如果有人可以提出一种方法来填充丢失的对象,这也将很高兴,但这并不是这个问题的重点,因为我认为我需要首先了解如何获得最小和最大。
最佳答案
您可以添加缺少的日子而无需明确找到min
和max
:
按DayOfYear
升序对列表进行排序(how?)
在列表的末尾开始循环索引i
,然后向后移动; i
达到零时停止
比较DayOfYear
和i
的i-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.