Сохраняет ли Distinct() всегда первый элемент в списке

Будет

int[] nums = { 2, 3, 3, 4, 2, 1, 6, 7, 10 };
var distinct = nums.Distinct();

всегда возвращать 2, 3, 4, 1, 6, 7, 10 в этом порядке?

Ответы

Ответ 1

Определенное поведение Enumerable.Distinct заключается в том, что оно вернет неупорядоченную коллекцию (Документация).

Однако текущая реализация Distinct в Linq to Objects сохранит порядок. Это не гарантируется для других поставщиков LINQ, хотя на поведение не следует полагаться.

Ответ 2

Я думаю, что слово "неупорядоченное" означает тот же порядок исходной последовательности.
Следовательно, вызывающий должен решить, сортировать результат или нет.

Ответ 3

В общем: нет, но в вашем случае (с массивом int): возможно, да. Бьюсь об заклад, они просто перечисляют сбор и игнорируют предметы, с которыми они уже сталкивались. Но не рассчитывайте на это поведение в разных версиях .NET или для разных типов коллекций.

Как указал JaredPar в своем ответе, результат указан как неупорядоченный. Если вам нужен какой-то конкретный заказ, вам нужно отсортировать их позже, используя любой алгоритм, имеющий смысл в вашем случае.