• [读书笔记]数据字典


    这是一个关于数据字典使用的例子

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace DictionaryExample
    {
        public struct EmployeeId : IEquatable<EmployeeId>
        {
            private readonly char prefix;
            private readonly int number;
    
            public EmployeeId(string id)
            {
                if (id == null)
                    throw new ArgumentNullException("id");
                
                prefix = (id.ToUpper())[0];
                int numLength = id.Length - 1;
                number = int.Parse(id.Substring(1, numLength > 6 ? 6 : numLength));
            }
    
            public override string ToString()
            {
                return prefix.ToString() + string.Format("{0,6:000000}", number);
            }
    
            public override int GetHashCode()
            {
                return (number ^ number << 16) * 0x15051505;
            }
    
            public bool Equals(EmployeeId other)
            {
               return (prefix == other.prefix && number == other.number);
            }
        }
    
        public class Employee
        {
            private string name;
            private decimal salary;
            private readonly EmployeeId id;
    
            public Employee(EmployeeId id, string name, decimal salary)
            {
                this.id = id;
                this.name = name;
                this.salary = salary;
            }
    
            public override string ToString()
            {
                return String.Format("{0}: {1, -20} {2:C}", id.ToString(), name, salary);
            }
    
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                Dictionary<EmployeeId, Employee> employees = new Dictionary<EmployeeId, Employee>(31);
    
                EmployeeId idJeff = new EmployeeId("C7102");
                Employee jeff = new Employee(idJeff, "Jeff Gordon", 5164580.00m);
                employees.Add(idJeff, jeff);
                Console.WriteLine(jeff);
    
                EmployeeId idTony = new EmployeeId("C7105");
                Employee Tony = new Employee(idTony, "Tony Stewart", 4814200.00m);
                employees.Add(idTony, Tony);
                Console.WriteLine(Tony);
    
                EmployeeId idDenny = new EmployeeId("C8011");
                Employee Denny = new Employee(idDenny, "Denny Hamlin", 3718710.00m);
                employees.Add(idDenny, Denny);
                Console.WriteLine(Denny);
    
                EmployeeId idCarl = new EmployeeId("F7908");
                Employee Carl = new Employee(idCarl, "Carl Edwards", 3285710.00m);
                employees[idCarl] = Carl;
                Console.WriteLine(Carl);
    
                EmployeeId idMatt = new EmployeeId("F7203");
                Employee Matt = new Employee(idMatt, "Matt Kensenth", 4520330.00m);
                employees.Add(idMatt, Matt);
                Console.WriteLine(Matt);
    
                while (true)
                {
                    Console.Write("Enter employee id (X to exit)>");
    
                    string userInput = Console.ReadLine();
                    userInput = userInput.ToUpper();
    
                    if (userInput == "X") break;
    
                    EmployeeId id = new EmployeeId(userInput);
                    Employee employee;
                    if (!employees.TryGetValue(id, out employee))
                    {
                        Console.WriteLine("Employee with id " + "{0} does not exist", id);
                    }
                    else
                    {
                        Console.WriteLine(employee);
                    }
                }
    
            }
        }
    }
    
    

    主要关注这里面的对于GetHashCode的重载的算法。这里GetHashCode使用的算法将数字向左移动16位,再与原来的数字进行异或操作,最后将结果乘以十六进制数15051505。散列码在整数取值区域上的分布相当均匀。

    伪python爱好者,正宗测试实践者。
  • 相关阅读:
    vue-cli的npm run build的常见问题
    es6 Symbol
    es6 对象的扩展
    es7 函数绑定
    es6 箭头函数
    学习weex遇见非常奇怪的问题
    微信
    java面试题
    PHP面试题
    Android
  • 原文地址:https://www.cnblogs.com/herbert/p/1749394.html
Copyright © 2020-2023  润新知