C # Убедитесь, что нет дубликатов в байтовом массиве - PullRequest
0 голосов
/ 26 августа 2009

Какой самый простой способ убедиться в отсутствии дубликатов и в порядке байтового массива, скажем, из сетевого соединения?

Ответы [ 3 ]

3 голосов
/ 26 августа 2009

Если вы работаете в .NET 3.5, получить уникальные предметы довольно легко ...

var ba = new byte[6];

ba[0] = 1;
ba[1] = 1;
ba[2] = 2;
ba[2] = 2;
ba[3] = 3;
ba[4] = 4;
ba[5] = 4;

var res = ba.Distinct().ToArray();  // unique

Можете ли вы объяснить, что вы подразумеваете под "по порядку"?

2 голосов
/ 26 августа 2009

создает массив из 256 логических значений и перебирает байтовый массив один за другим.

установите для каждого значения в массиве значение true, когда вы столкнетесь с ним. если вы встретите уже истинное значение, тогда байтовый массив имеет недопустимый формат

Я не совсем понимаю, что вы подразумеваете под битом "байтовый массив в порядке"

Вы также можете использовать bitarray

пример:

bool CheckForDuplicates(byte[] arr)
    {
        bool[] map = new bool[256];

        foreach (byte b in arr)
        {
            if (map[b] == true)
                return false;
            map[b] = true;
        }
        return true;
    }
1 голос
/ 26 августа 2009

если вам не нужно выдавать исключение или тому подобное, если одно и то же значение встречается дважды, вы можете сделать:

var set = new HashSet<byte>(byteArray);

если вы в порядке сортировки средних значений, вы можете вызвать метод расширения LINQ Sort для объекта, установленного сверху

...