我有数字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);
}
答案 0 :(得分:4)
您可以使用LINQ Except
:
var result = Enumerable.Range(1, 31).Except(days);
答案 1 :(得分:0)
看起来您正在检查0..29范围内的数字而不是1..31。我唯一的建议是将for循环更改为:
for(int i = 1; i <= 31; i ++)
答案 2 :(得分:0)
首先,当你添加一个月的日子时,可能更容易循环一个DateTimes循环,即
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)
}
这里的前提是您添加的每个DateTime都是唯一的。
如果您无法保证,您的解决方案非常有效,但可以使用一些优化。
使用最大值初始化arary:int[31] days = GetSelectedDays();
一个月可以有31天:for (int i = 1; i <32; i++)
如果可能,请填写result
GetSelecteDays()
醇>