c# - 如何填补列表中属性值的空白?

标签 c# linq

我有一个列表:

List<BtnCountViews> btnCountViewsList;

BtnCountViews 类如下所示:

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

我有一个非常不寻常的要求,我不确定如何开始实现它。

我想做的是用 `BtnCountViews 填充 btnCountViewsList,用于缺少 BtnCount 为 0 和 Views 为 0 的对象的 DayOfYear。

为了让我开始,谁能告诉我如何在 btnCountViewsList 中找到最小和最大 DayOfYear。请注意,我用 LINQ 标记了它,但我不确定这是否是最好的工具。

如果有人可以建议一种方法来填充缺失的对象,我们也会很高兴,但这并不是这个问题的真正重点,因为我认为我需要先找出如何获得最小值和最大值。

最佳答案

您可以在不明确找到 minmax 的情况下添加缺失的天数:

  • DayOfYear 升序排列列表 ( how? )
  • 在列表的末尾开始一个循环索引i,然后向后工作;当 i 达到零时停止
  • 比较 DayOfYear 属性在 ii-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.

关于c# - 如何填补列表中属性值的空白?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47775298/

相关文章:

c# - 过滤掉 Linq 中的空值

c# - XElement 不应该从其父 Xelement 继承命名空间吗?

c# - 如何使用 Linq 从 xml 构建一个 c# 对象,其中一个元素具有零个或多个相同类型的元素?

C#:基类可以在静态函数中使用派生类的变量吗?

c# - 我想在 session ID licitys 中存储列表项,但不能这样做可以有任何建议

c# - 如何将unicode代码更改为char

c# - 为什么返回 C# Convert.ToDouble(5/100) 0.0 而不是 0.05

c# - 使用 PrincipalPermission 强制执行正确的 IPrincipal 和 IIdentity

c# - LINQ 除了运算符和对象相等

c# - 寻找C#中最无痛的非RDBMS存储方式