如何从一年中的月份列表中查找丢失的月份

阿西克

我在下面的示例销售清单中显示了过去12个月内赚了多少钱,而2个月都没有了(可以或多或少)。

[{1, 400}, {2,500}, {4, 550}, {5, 425}, {6, 770}, {7, 500}, {9, 300}, {10, 900}, {11, 440}, {12, 620}]

月份按升序排列,所以1是1月,12是12月。如何在代码中更新此列表以添加缺失值为0的月份的销售对象。在这种情况下,添加{3, 0}{8, 0}

我从数据库中检索了这些,而某些缺失的原因是因为它们在数据库中没有记录,因此我想在缺失的月份中添加零。该月来自DateTime.Date.Month

公路跑者

假设您有一个代表您月份的课程:

public class MonthData
{
    public int Month { get; set; }
    public int Money { get; set; }
}

然后,您可以使用LINQ查找丢失的月份,然后将其插入原始列表中:

var months = new List<MonthData>
{
    new MonthData {Month = 1, Money = 400},
    new MonthData {Month = 2, Money = 500},
    new MonthData {Month = 4, Money = 550},
    new MonthData {Month = 5, Money = 425},
    new MonthData {Month = 6, Money = 770},
    new MonthData {Month = 7, Money = 500},
    new MonthData {Month = 9, Money = 300},
    new MonthData {Month = 10, Money = 900},
    new MonthData {Month = 11, Money = 440},
    new MonthData {Month = 12, Money = 620}
};

# Find missing months
var missingMonths = Enumerable
    .Range(months.Min(m => m.Month), months.Max(m => m.Month))
    .Except(months.Select(m => m.Month))

# Insert missing months back into months list
foreach (var month in missingMonths)
{
    months.Insert(month - 1, new MonthData { Month = month, Money = 0 });
}

另外,用于插入的List<T>.Insert(Int32, T)O(N)我们可以通过Dictionary<int, int>O(1)插入使用a来改善此问题

var months = new Dictionary<int, int>
{
    {1, 400},
    {2,500},
    {4, 550},
    {5, 425},
    {6, 770},
    {7, 500},
    {9, 300},
    {10, 900},
    {11, 440},
    {12, 620}
};

var missingMonths = Enumerable
    .Range(months.Keys.Min(), months.Keys.Max())
    .Except(months.Keys);

foreach (var month in missingMonths)
{
    months[month] = 0;
}

并且还可以选择返回到下一List<MonthData>行:

var monthList = months
    .Select(pair => new MonthData { 
        Month = pair.Key, 
        Money = pair.Value 
    })
    .OrderBy(m => m.Month)
    .ToList();

由于字典本质上是无序的,因此需要使用O(NLogN)进行排序Enumerable.OrderBy

试穿dotnetfiddle.net

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何查找一年中给定月份中该月的周数?

来自分类Dev

Excel:用数值映射一年中的月份

来自分类Dev

如何对过去一年中的月份列进行 SUM

来自分类Dev

从一年的第一个月到一年中选定的月份的总和SQL

来自分类Dev

如何从一年中的日期获取日期

来自分类Dev

获取一年中一周中的月份数(Python)

来自分类Dev

SSRS:如何将一年中的所有月份都显示为图表的 X 轴

来自分类Dev

在Android中获取一年的月份?

来自分类Dev

按一年中的月份对数据进行分类

来自分类Dev

获取一年中所选月份的所有日期和日期

来自分类Dev

获取一年中每个月的总计,包括没有结果的月份

来自分类Dev

按一年中的月份对数据进行分类

来自分类Dev

SQL过滤掉任何一年中的特定月份,日期和时间

来自分类Dev

Postgresql获取一年中的所有月份和空值

来自分类Dev

按一年中的月份计算电子邮件

来自分类Dev

SSRS 显示一年中没有数据的所有月份

来自分类Dev

如何从一个变量中获取日期为同一天和月份,但在一年中基于另一个变量获取日期?

来自分类Dev

从一年的星期数中获取月份的星期数

来自分类Dev

选择一年中的一个月份进行排名,然后将剩下的年份进行排名

来自分类Dev

使用 CALENDAR 将月份和日期数字转换为一年中的第几天

来自分类Dev

如何避免datepart从一年中的新一周开始更改

来自分类Dev

查找一年中的总天数(熊猫)

来自分类Dev

在Python中创建下一年度的月份列表

来自分类Dev

如何遍历一年中剩余的日子并在javascript中查找某些日期?

来自分类Dev

如何使用Pandas根据实际日期查找一年中的天数?

来自分类Dev

如何为日期值查找一年中的第几周?

来自分类Dev

删除表中所有少于上一年当前日期的记录,但不要删除过去2年中给定月份的结束日期

来自分类Dev

计算一年中第一周的日期的一周的第一天的日期会更改月份

来自分类Dev

如何确定从日期算起一年中的星期?

Related 相关文章

  1. 1

    如何查找一年中给定月份中该月的周数?

  2. 2

    Excel:用数值映射一年中的月份

  3. 3

    如何对过去一年中的月份列进行 SUM

  4. 4

    从一年的第一个月到一年中选定的月份的总和SQL

  5. 5

    如何从一年中的日期获取日期

  6. 6

    获取一年中一周中的月份数(Python)

  7. 7

    SSRS:如何将一年中的所有月份都显示为图表的 X 轴

  8. 8

    在Android中获取一年的月份?

  9. 9

    按一年中的月份对数据进行分类

  10. 10

    获取一年中所选月份的所有日期和日期

  11. 11

    获取一年中每个月的总计,包括没有结果的月份

  12. 12

    按一年中的月份对数据进行分类

  13. 13

    SQL过滤掉任何一年中的特定月份,日期和时间

  14. 14

    Postgresql获取一年中的所有月份和空值

  15. 15

    按一年中的月份计算电子邮件

  16. 16

    SSRS 显示一年中没有数据的所有月份

  17. 17

    如何从一个变量中获取日期为同一天和月份,但在一年中基于另一个变量获取日期?

  18. 18

    从一年的星期数中获取月份的星期数

  19. 19

    选择一年中的一个月份进行排名,然后将剩下的年份进行排名

  20. 20

    使用 CALENDAR 将月份和日期数字转换为一年中的第几天

  21. 21

    如何避免datepart从一年中的新一周开始更改

  22. 22

    查找一年中的总天数(熊猫)

  23. 23

    在Python中创建下一年度的月份列表

  24. 24

    如何遍历一年中剩余的日子并在javascript中查找某些日期?

  25. 25

    如何使用Pandas根据实际日期查找一年中的天数?

  26. 26

    如何为日期值查找一年中的第几周?

  27. 27

    删除表中所有少于上一年当前日期的记录,但不要删除过去2年中给定月份的结束日期

  28. 28

    计算一年中第一周的日期的一周的第一天的日期会更改月份

  29. 29

    如何确定从日期算起一年中的星期?

热门标签

归档