亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#哈希算法的實現方法及思路

2020-01-24 03:01:54
字體:
來源:轉載
供稿:網友

有想過hash["A1"] = DateTime.Now;這句是怎么實現的嗎?我們來重溫下學校時代就學過的哈希算法吧。

我們要寫個class,實現如下主程序調用:

復制代碼 代碼如下:

static void Main(string[] args)
        {
            MyHash hash = new MyHash();
            hash["A1"] = DateTime.Now;
            hash["A2"] = 1;
            Console.WriteLine(Convert.ToString(hash["A1"]));
            Console.WriteLine(Convert.ToString(hash["A2"]));
        }

一看,也確實挺簡單的,就是一個所引器,如下:

復制代碼 代碼如下:

class MyHash
    {
        public object this[string key]
        {
            get
            {
            }
            set
            {
            }
        }
    }

程序中要保存的對象,最終是要保存在一個數組中的,而且需要通過一個轉換函數來進行string key與數組Index的Map,如下:

復制代碼 代碼如下:

private List<List<Tuple<string, object>>> lstArray = new List<List<Tuple<string, object>>>(defaultSize);

private int MapString2Int(string key)
        {
            int hashIndex=0;
            char[] keyAry = key.ToCharArray();
            foreach (var c in keyAry)
                hashIndex += (int)c;

            hashIndex = hashIndex % lstArray.Capacity;
            return hashIndex;
        }

這個函數是遍歷string key的每個char,累加,最終取模(同數組的長度),這樣得出的一個value肯定就在數組范圍內。

如果2個key轉換出來的index相同呢?會導致沖突,一個最簡單的解決辦法是把數組中的每個元素變成List, 也就是說,如果string key轉換后出現了相同的Index,沒關系,只要把那2個元素都放在那個Index所標識的數組位置中即可,本文中用的是List<Tuple<string, object>>。

下面是整個程序的代碼:

復制代碼 代碼如下:

class Program
    {
        static void Main(string[] args)
        {
            MyHash hash = new MyHash();
            hash["A1"] = DateTime.Now;
            hash["A2"] = 1;
            Console.WriteLine(Convert.ToString(hash["A1"]));
            Console.WriteLine(Convert.ToString(hash["A2"]));
        }
    }

    class MyHash
    {
        private const int defaultSize = 99999;
        private List<List<Tuple<string, object>>> lstArray = new List<List<Tuple<string, object>>>(defaultSize);

        public MyHash()
        {
            int i = lstArray.Capacity;
            while(i>=0)
            {
                lstArray.Add(new List<Tuple<string,object>>());
                i--;
            }
        }

        public object this[string key]
        {
            get
            {
                EnsureNotNull(key);

                List<Tuple<string, object>> lst;
                Tuple<string, object> obj = FindByKey(key, out lst);
                if (obj == null)
                    throw new Exception("Key不存在");

                return obj.Item2;
            }
            set
            {
                EnsureNotNull(key);

                List<Tuple<string, object>> lst;
                Tuple<string, object> obj = FindByKey(key, out lst);
                if (obj!=null)
                    lst.Remove(obj);

                lst.Add(new Tuple<string, object>(key, value));
            }
        }

        private Tuple<string, object> FindByKey(string key, out List<Tuple<string, object>> lst)
        {
            int hashIndex = MapString2Int(key);
            lst = lstArray[hashIndex];
            Tuple<string, object> obj = null;
            for (var i = 0; i < lst.Count; i++)
            {
                if (lst[i].Item1 == key)
                {
                    obj = lst[i];
                    break;
                }
            }

            return obj;
        }

        private static void EnsureNotNull(string key)
        {
            if (key == null || key.Trim().Length == 0)
                throw new Exception("Key不能為空");
        }

        private int MapString2Int(string key)
        {
            int hashIndex=0;
            char[] keyAry = key.ToCharArray();
            foreach (var c in keyAry)
                hashIndex += (int)c;

            hashIndex = hashIndex % lstArray.Capacity;

            Console.WriteLine(string.Format("{0}相應的Index為:{1}", key, hashIndex));

            return hashIndex;
        }
    }

運行效果圖:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性欧美xxxx视频在线观看| 日韩免费在线观看视频| 亚洲精品中文字幕女同| 亚洲欧洲国产一区| 欧美日韩国产综合新一区| 成人精品网站在线观看| 久久91亚洲人成电影网站| 国产一区二区三区视频| 日韩精品中文字幕在线播放| 国产69精品久久久久9999| 欧美激情中文字幕在线| 国内精品久久久久久久| 国产成人精品午夜| 97精品国产91久久久久久| 国产日韩欧美在线视频观看| 久久久久亚洲精品成人网小说| 久久久亚洲成人| 色综合久久久久久中文网| 日韩电影大全免费观看2023年上| 亚洲美女免费精品视频在线观看| 国产成人精品av| 2018中文字幕一区二区三区| 最好看的2019的中文字幕视频| 亚洲一区二区久久久久久久| 欧美孕妇与黑人孕交| 国产精品第一视频| 国产日韩欧美在线观看| 国产精品人成电影在线观看| 亚洲天堂久久av| 91久久在线观看| 国产精品久久久久久久久借妻| 中文字幕精品久久久久| 亚洲国产精品va在线观看黑人| 国内精品美女av在线播放| 在线午夜精品自拍| 成人在线中文字幕| 国产精品盗摄久久久| 欧美精品在线视频观看| 欧美日韩视频免费播放| 久久久精品国产一区二区| 精品福利视频导航| 久久精品国产96久久久香蕉| 亚洲国产成人av在线| 大伊人狠狠躁夜夜躁av一区| 欧美视频在线观看 亚洲欧| 精品自拍视频在线观看| 精品国产欧美成人夜夜嗨| 欧美日韩在线视频一区二区| 91免费观看网站| 亚洲色图偷窥自拍| 色先锋资源久久综合5566| 26uuu另类亚洲欧美日本老年| 国产亚洲精品成人av久久ww| 韩国国内大量揄拍精品视频| 91在线视频九色| 色中色综合影院手机版在线观看| 国产精品美腿一区在线看| 日韩a**中文字幕| 高清在线视频日韩欧美| 国产精品天天狠天天看| 国产精品久久久久久超碰| 欧美日韩精品国产| 91精品久久久久久久久青青| 狠狠躁夜夜躁久久躁别揉| 亚洲国产精品大全| 日av在线播放中文不卡| 亚洲free性xxxx护士白浆| 久久久视频在线| 日韩av综合网站| 精品久久久香蕉免费精品视频| 久久电影一区二区| 成人国产精品一区二区| 亚洲最大福利网| 国产精品国语对白| 欧美乱妇40p| 最新中文字幕亚洲| 国产91精品最新在线播放| 国产精品视频免费观看www| 国产97在线播放| 日韩中文字幕精品视频| 国产日韩欧美在线视频观看| 91久久久久久久久久| 精品视频中文字幕| 欧美日韩中文字幕在线视频| 伊人久久久久久久久久久| 69久久夜色精品国产7777| 日韩欧美中文字幕在线播放| 国产精品久久久av| 日韩欧美在线字幕| 国产免费观看久久黄| 国产欧洲精品视频| 精品偷拍各种wc美女嘘嘘| 精品国模在线视频| 国产精品老女人视频| 国产原创欧美精品| 国产亚洲欧美另类中文| 日韩欧中文字幕| 欧美一级电影免费在线观看| 一夜七次郎国产精品亚洲| 亚洲午夜未删减在线观看| 欧美乱大交xxxxx另类电影| 最近中文字幕mv在线一区二区三区四区| 中文字幕亚洲色图| 欧美激情精品久久久久久黑人| 欧美一性一乱一交一视频| 91在线视频免费| 日韩国产高清污视频在线观看| 高清欧美性猛交xxxx黑人猛交| 色噜噜国产精品视频一区二区| 91精品国产乱码久久久久久久久| 久久久精品2019中文字幕神马| 午夜精品久久17c| 成人性生交大片免费看视频直播| 欧美韩日一区二区| 国产成+人+综合+亚洲欧美丁香花| 国产一区二区三区视频免费| 亲爱的老师9免费观看全集电视剧| 欧美高清视频免费观看| 国产欧美精品一区二区三区-老狼| 欧美性猛交xxxx乱大交蜜桃| 欧美亚洲日本黄色| 51久久精品夜色国产麻豆| 亚洲美女在线视频| 国产日韩欧美在线| 日韩在线视频免费观看高清中文| 久久亚洲影音av资源网| 久久精品男人天堂| 国产精品美女久久久久av超清| 日韩精品视频中文在线观看| 久久久久久久成人| 午夜精品久久久久久久99黑人| 亚洲欧美激情精品一区二区| 国产精品日韩在线一区| 国产精品xxx视频| 高清一区二区三区日本久| 亚洲乱码一区av黑人高潮| 在线免费看av不卡| 中文字幕在线看视频国产欧美在线看完整| 欧美激情videos| 国产啪精品视频网站| 欧美日韩aaaa| 国产v综合v亚洲欧美久久| 亚洲一区久久久| 国产精品久久久久久av福利| 亚洲第一级黄色片| 久久精品国产精品| 91精品在线影院| 最新的欧美黄色| 成人国产亚洲精品a区天堂华泰| 日韩av在线免费播放| 久久69精品久久久久久久电影好| 狠狠躁夜夜躁久久躁别揉| 日韩中文字幕av| 91精品久久久久久久久| 亚洲精品久久久一区二区三区| 日韩高清免费观看| 国产精品久久久久不卡| 日韩精品免费在线播放| 久久久久久久色| 91精品国产高清自在线看超| 岛国av午夜精品| 97欧美精品一区二区三区| 欧美国产日韩xxxxx| 正在播放欧美一区|