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

Сообщение Re: Dictionary<X, Dictionary<Y, Z>> от 19.10.2015 7:53

Изменено 19.10.2015 8:26 Serginio1

Здравствуйте, _NN_, Вы писали:

Вместо двух словарей проще использовать один с составным ключом. Редко пеишу на C# но что типа такого

public struct MyStruct<X,Y>
    {
        public X СвойствоX;
        public Y СвойствоY;

        
        public MyStruct(X СвойствоX, Y СвойствоY)
            {
            this.СвойствоX = СвойствоX;
            this.СвойствоY = СвойствоY;
        }
        public override int GetHashCode()
        {
            //Упростим задачу и сделаем по простому
            string str= Convert.ToBase64String(BitConverter.GetBytes(СвойствоX.GetHashCode()))+ Convert.ToBase64String(BitConverter.GetBytes(СвойствоY.GetHashCode()));
            return str.GetHashCode();
        }

        public override bool Equals(object obj)
        {
            if (obj.GetType()!= GetType()) return false;

            var Объект = (MyStruct<X, Y>)obj;
            return СвойствоX.Equals(Объект.СвойствоX) && СвойствоY.Equals(Объект.СвойствоY);
        }
    }
Re: Dictionary<X, Dictionary<Y, Z>>
Здравствуйте, _NN_, Вы писали:

Вместо двух словарей проще использовать один с составным ключом. Редко пеишу на C# но что типа такого

public struct MyStruct<X,Y>
    {
        public X СвойствоX;
        public Y СвойствоY;

        
        public MyStruct(X СвойствоX, Y СвойствоY)
            {
            this.СвойствоX = СвойствоX;
            this.СвойствоY = СвойствоY;
        }
        public override int GetHashCode()
        {
            //Упростим задачу и сделаем по простому
            string str= Convert.ToBase64String(BitConverter.GetBytes(СвойствоX.GetHashCode()))+ Convert.ToBase64String(BitConverter.GetBytes(СвойствоY.GetHashCode()));
            return str.GetHashCode();
        }

//Можно взять из Tuple

//internal static int CombineHashCodes(int h1, int h2)
//{
//    return (h1 << 5) + h1 ^ h2;
//}
        public override bool Equals(object obj)
        {
            if (obj.GetType()!= GetType()) return false;

            var Объект = (MyStruct<X, Y>)obj;
            return СвойствоX.Equals(Объект.СвойствоX) && СвойствоY.Equals(Объект.СвойствоY);
        }
    }