У меня есть IEnumerable<int>
, который содержит все существующие идентификаторы. Я хотел бы создать новый идентификатор, который является любым int
, который не находится в существующих идентификаторах. У меня есть взломанное решение, но я хотел бы знать, как это сделать.Как создать новый идентификатор, который не находится в IEnumerable?
// Inefficient solution
public static int GetFreshId(this IEnumerable<int> existingIds)
{
int i = Int32.MinValue;
while (existingIds.Contains(i)) // There is a case where all ids are taken!
{
i += 1;
}
return i;
}
Обновление: здесь лучше определяется как:
- собрания требования
- предсказуемую производительность
- Наименьший большой ой возможно
- Должно работать на любой
IEnumerable
реализация, albiet быстрее для некоторого t хань другие - Должно быть без гражданства
«Лучший «путь - это тот, который работает и соответствует вашим функциональным и нефункциональным требованиям. – zerkms
Stuff existingIds.Max() в приватном статическом int _nextID и увеличивать его, когда вам нужно –
Не лучше ли использовать только положительные значения? Нет ничего плохого в отрицательном значении, но я не знаю, это немного странно для меня. – Magnetron