LINQ может помочь:
itemsToAdd.Except(idList)
Ваш код медленный, потому что List<T>.Contains
равен O(n)
. Таким образом, ваша общая стоимость O(itemsToAdd.Count*idList.Count)
.
Вы можете превратить idList в HashSet<T>
, который имеет O(1)
.Contains
. Или просто используйте метод расширения Linq .Except
, который сделает это за вас.
Обратите внимание, что .Except
также удалит все дубликаты с левой стороны. то есть новый int[]{1,1,2}.Except(new int[]{2})
приведет только к {1}
, а второй 1 был удален. Но я предполагаю, что в вашем случае это не проблема, потому что идентификаторы, как правило, уникальны.