Поиск в двух списках с помощью вложенного цикла
Я пытаюсь найти номер квартиры, который еще не занят. Так 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