<thead id="kqoxr"></thead>
<blockquote id="kqoxr"></blockquote>
<legend id="kqoxr"><li id="kqoxr"></li></legend>
    1. <sub id="kqoxr"></sub>
      1. <blockquote id="kqoxr"><i id="kqoxr"><noscript id="kqoxr"></noscript></i></blockquote>
        <pre id="kqoxr"></pre>

        91午夜福利在线观看精品,亚洲综合色婷婷中文字幕,亚洲日本欧洲二区精品,竹菊影视欧美日韩一区二区三区四区五区,亚洲色在线V中文字幕,国产精品毛片av999999,精品视频不卡免费观看,亚洲全乱码精品一区二区

        C# GetHashCode 的實現方式 -電腦資料

        電腦資料 時間:2019-01-01
        【m.r9876.cn - 電腦資料】

            在項目中,在使用哈希表時,有時會需要Override GetHashCode,

        C# GetHashCode 的實現方式

        。這里給出一種普遍的做法:

            版本1:

            實現一個helper,傳遞類型T,返回這個類型的hashcode。函數邏輯很直接,只是做了null check而已;如果obj不為空,則直接使用obj的hash code。

           

        public class HashHelper{	private int _seed = 17;		public int Hash<t>(T obj)	{		// why 31?		// https://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/		// shortly, to reduce the conflict of hashing key's distrabution		return 31 * _seed + ((obj == null) ? -1 : obj.GetHashCode());	}}</t>

            為什么使用了magic number 31? 使用素數乘積可以相對增加唯一性,減少哈希鍵值分配時的沖突;而31則是為了編譯器優化的考慮(有效的轉換為i<<5-1)。大概搜了一下,這種實現方式來自JAVA中string 的hash code函數。這里有詳細介紹:

            https://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/

            實現版本2:

            可以擴展這個類成為流暢接口,它可以hash各種類型的,對于值類型來說,重載的意義在于減少裝箱;對于集合或泛型,則為了讓外部調用更自然,可讀性更強,

        電腦資料

        C# GetHashCode 的實現方式》(http://m.r9876.cn)。

           

        public class HashFluent{	private int _seed = 17;		private int _hashContext;		public HashFluent Hash<t>(T obj)	{		// why 31?		// https://computinglife.wordpress.com/2008/11/20/why-do-hash-functions-use-prime-numbers/		// shortly, to reduce the conflict of hashing key's distrabution		_hashContext = 31 * _seed + ((obj == null) ? -1 : obj.GetHashCode());		return this;	}		public HashFluent Hash(int? value)	{		_hashContext = 31 * _seed + ((value == null) ? -1 : value.GetHashCode());		return this;	}		public HashFluent Hash(IEnumerable sequence)	{		if (sequence == null)		{			_hashContext = 31 * _hashContext + -1;		}		else		{			foreach (var element in sequence)			{				_hashContext = 31 * _hashContext + ((element == null) ? -1 : element.GetHashCode());			}		}		return this;	}		public override int GetHashCode (){		return _hashContext;	}			// add more overridings here ..	// add value types overridings to avoid boxing which is important}</t>

        最新文章
        主站蜘蛛池模板: 欧美丰满少妇xxxxx| 午夜天堂精品久久久久| 在线观看无码av免费不卡网站| 欧美一级黄色影院| 国产精品国产伦子伦露看| 欧美国产日韩A在线观看| 欧美506070老妇乱子伦| 亚洲中文字幕精品一区二区三区 | 亚洲岛国成人免费av| 国产黄色视频大全| 天天操天天操天天操| 亚洲国产国语自产精品| 色猫咪av在线网址| 1024在线免费观看| 国产一区18| 午夜性色一区二区三区不卡视频| 在线看免费无码av天堂| 午夜一区二区三区视频| 精品人妻无码一区二区三区抖音| 真人在线射美女视频在线观看| 国产女主播喷水视频在线观看| 永久免费av网站可以直接看的 | 狠狠综合亚洲综合亚洲色| 久草香蕉| 自偷自拍亚洲综合精品| 人妻?无码中出| 一木色道久久久蜜桃| 中文字幕无码精品亚洲35| 国产成AV人片久青草影院| 韩国精品一区二区三区在线观看| 亚洲免费123区| 奇米影视7777久久精品| 免费Aⅴ片在线观看蜜芽Tⅴ | 国产精品理论片| 尤物视频在线播放你懂的| 国产熟女真实乱精品51| av激情亚洲| 国产亚洲综合网| 亚洲日韩久热中文字幕| 奶头又大又白喷奶水av| 夜夜添无码试看一区二区三区|