Информация об изменениях

Сообщение Re: Хэш для диапазона дат от 21.03.2017 10:45

Изменено 21.03.2017 11:30 Serginio1

Re: Хэш для диапазона дат
Здравствуйте, busk, Вы писали:


B>Есть интервал в виде дат — два поля. Надо сделать что то типа хэша для данного диапазона чтобы потом можно было сравнивая два хэша сказать, что они пересекаются.


Ну записывай две даты в стрим и получай Хэш
Взят отсюда

https://ru.wikipedia.org/wiki/FNV

        public static int ComputeHash(params byte[] data)
        {
            unchecked
            {
                const int p = 16777619;
                int hash = (int)2166136261;

                for (int i = 0; i < data.Length; i++)
                    hash = (hash ^ data[i]) * p;

                hash += hash << 13;
                hash ^= hash >> 7;
                hash += hash << 3;
                hash ^= hash >> 17;
                hash += hash << 5;
                return hash;
            }
        }
Re: Хэш для диапазона дат
Здравствуйте, busk, Вы писали:


B>Есть интервал в виде дат — два поля. Надо сделать что то типа хэша для данного диапазона чтобы потом можно было сравнивая два хэша сказать, что они пересекаются.


Ну записывай две даты в стрим и получай Хэш
Взят отсюда

https://ru.wikipedia.org/wiki/FNV

        public static int ComputeHash(params byte[] data)
        {
            unchecked
            {
                const int p = 16777619;
                int hash = (int)2166136261;

                for (int i = 0; i < data.Length; i++)
                    hash = (hash ^ data[i]) * p;

                hash += hash << 13;
                hash ^= hash >> 7;
                hash += hash << 3;
                hash ^= hash >> 17;
                hash += hash << 5;
                return hash;
            }
        }



Ну и записть в стрим

 public static DateTime ReadDateTime(BinaryReader stream)
        {
            long nVal = stream.ReadInt64();
            //get 64bit binary
            return DateTime.FromBinary(nVal);


        }

        public static void WriteDateTime(DateTime value,BinaryWriter stream)
        {
            long nVal = value.ToBinary();
            //get 64bit binary
             stream.Write(nVal);


        }