2016-02-15 21 views
2

我有數組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

歡迎來到SO。你的問題是什麼? [問] – Dmitry

+0

你從其他地方收到這個數組嗎? –

+0

我很想找到更好的靈魂,然後我有 –

回答

4

可以使用LINQ Except

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

看起來您目前正在檢查0..29範圍內的數字,而不是1..31。我有唯一的建議是改變for循環:

的for(int i = 1;我< = 31; i ++在)

0

首先當你在這裏添加一個月的它可能是循環更容易通過DateTime是否的循環,即

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是獨一無二的。

如果你不能保證,你的解決方案是非常有效的,但可以使用一些優化。

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

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

  3. 如果可能的話,請填寫循環result您填寫GetSelecteDays()