使用嵌套循环搜索两个列表

时间:2014-10-23 09:00:49

标签: c# for-loop nested-loops

我试图找到一个尚未拍摄的公寓号码。因此,list<>是已列入公寓的列表,all<>是所有公寓的列表。所以我试图通过迭代来找到一个尚未被采取的公寓。

这不起作用:

list<> // 4 indexes
all<> // 25 indexes

for (int i = 0;i < all.Count; i++)
{
    for (int j = 0; j < list.Count; j++)
    {   
        if (all[i].apartmentNr != list[j].apartmentNr)
        {
            apartmentNr = all[i].apartmentNr;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

using System.Linq;

//availableApartments will contain all available apartments
var availableApartments = all.Except(list) 

// Will get you the first item.
var freeApartment = availableApartments.FirstOrDefault()

参考 - Enumerable.Except

答案 1 :(得分:1)

问题是您没有检查所有list项目,因此在第一次不匹配时设置apartmentNr,但可能会在下一个列表项上进行。因此,您需要先检查所有list项,然后才能得出结论:

list<> // 4 indexes
all<> // 25 indexes

for (int i = 0;i < all.Count; i++)
{
    bool taken = false;
    for (int j = 0; j < list.Count; j++)
    {   
        if (all[i].apartmentNr == list[j].apartmentNr)
        {
            taken = true;
            break; // no need to check the rest
        }
    }
    if (!taken) {
        apartmentNr = all[i].apartmentNr;
        break; // found first free
    }
}