/// <summary> /// init /// </summary> /// <param name="arrNodes"></param> public void Init(string[] arrNodes) { if (arrNodes == null || arrNodes.Length == 0) { throw new ArgumentNullException("arrNodes"); } this._arrNodes = arrNodes.Distinct().ToArray(); this._dic.Clear(); this._keys = null; var listKeys = new List <uint>(); foreach (var node in arrNodes) { for (int i = 0; i < 250; i++) { var key = ModifiedFNV1_32.GetHashCode(Encoding.UTF8.GetBytes(string.Concat(node, "-", i.ToString()))); if (this._dic.ContainsKey(key)) { continue; } this._dic[key] = node; listKeys.Add(key); } } listKeys.Sort(); this._keys = listKeys.ToArray(); }
/// <summary> /// calc /// </summary> /// <param name="key"></param> /// <returns></returns> public string GetNode(string key) { if (key == null) { throw new ArgumentNullException("key"); } var hash = ModifiedFNV1_32.GetHashCode(Encoding.UTF8.GetBytes(key)); return(this._arrNodes[hash % this._arrNodes.Length]); }
/// <summary> /// calc /// </summary> /// <param name="key"></param> /// <returns></returns> public string GetNode(string key) { if (key == null) { throw new ArgumentNullException("key"); } var i = Array.BinarySearch(this._keys, ModifiedFNV1_32.GetHashCode(Encoding.UTF8.GetBytes(key))); if (i < 0) { i = ~i; if (i >= this._keys.Length) { i = 0; } } return(this._dic[this._keys[i]]); }