gacar Ответов: 2

Как можно disctinc значения списка байтов?


Dim Bytes As Byte() = {22, 123, 1, 1, 0, 22}


Мне нужен порядок и массив байтов disticnt.
Bytes = {0,1,22,123}


Как я могу это сделать?
Спасибо

Что я уже пробовал:

Dim Bytes As Byte() = {22, 123, 1, 1, 0, 22}
Dim ListByte As List(Of Byte) = Bytes.ToList
ListByte = ListByte.OrderBy(Function(x) x).ToList.Distinct

2 Ответов

Рейтинг:
20

Dave Kreskowiak

Это можно сделать немного чище вот так:

Dim bytes As Byte() = {22, 123, 1, 1, 0, 22}
bytes = bytes.Distinct().OrderBy(Function(x) x).ToArray()
Distinct может быть вызван для любого IEnumerable, которым является массив байтов. В вашем случае Distinct() вернет IEnumerable(Of Byte). Это приводит к тому, что следующая операция стоит немного меньше, так как вы не сортируете так много элементов.

Вызов функции OrderBy() также может быть вызван для любого IEnumerable, который только что вернул вызов distinct. Он возвращает IOrderedEnumerable(Of Byte), который является подклассом IEnumerable. Это означает, что вы можете обращаться с любым IOrderedEnumerable так же, как если бы это был IEnumerable, что вы и собираетесь делать дальше.

Последняя операция проста. Он преобразует результат OrderBy обратно в массив. Это легко сделать с помощью вызова ToArray. Он создает новый массив из любого IEnumerable.

Сделано. У вас есть свой сортированный, отдельный массив.


gacar

Большое спасибо за решение и объяснение.

Рейтинг:
1

Gerry Schmitz

Вам нужно прикрепить "ToList" на конце; Distinct возвращает какой - то другой тип коллекции.

(Используйте "var", пока не выработаете специфику).