在数字数组中查找遗漏的元素

本文关键字:元素 查找 数字 数组 | 更新日期: 2023-09-27 18:34:31

我有数字为 1...31 的数组(每月天数(在我这边,我想找到所有错过的数字。这是我的解决方案,但我不确定这是一个好方法。

var result = new List<int>();
int[] days = GetSelectedDays(); //I recive array with 1..31 with some missing elements sometimes (without "5" as example it depends if user has selected this number)
for (int i=0; i <30; i++)
{
  if (!days.Contains(i))
  result.Add(i);
}

在数字数组中查找遗漏的元素

您可以使用

LINQ Except

var result = Enumerable.Range(1, 31).Except(days);

看起来您当前正在检查 0..29 而不是 1..31 范围内的数字。 我唯一的建议是将 for 循环更改为:

for (int i=1; i <= 31; i++(

首先,当您添加一个月中的几天时,可能更容易循环使用日期时间,即

var missedDateDictionary = new Dictionary<DateTime, bool>(); // or other value
var date = new DateTime(2016, 01, 01);
for (int i = 0 ; i < 32 ; i++)
{
    var newDate = date.AddDays(i);
    //do something with adding / not adding date
    if (notDoneSomething)
        missedDateDictionary.Add(newDate, true)
}

这里的前提是您要添加的每个日期时间都是唯一的。

如果您不能保证这一点,您的解决方案非常有效,但可以使用一些优化。

  1. 使用最大值初始化 arary:int[31] days = GetSelectedDays();

  2. 一个月可以有 31 天:for (int i = 1; i <32; i++)

  3. 如果可能的话,在你正在填充的循环中填充result GetSelecteDays()