Поиск в двух списках с помощью вложенного цикла

Я пытаюсь найти номер квартиры, который еще не занят. Так 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 ответа

Решение

Проблема в том, что вы не проверяете все 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
    }
}
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

Другие вопросы по тегам