/// <summary> /// 添加 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public bool Add(TKey key, TValue value) { CKeyValue <TKey, TValue> newKeyValuePair = new CKeyValue <TKey, TValue>(key, value); if (m_Array.Count == 0) { m_Array.Add(newKeyValuePair); return(true); } Int32 nSize = m_Array.Count; for (Int32 i = 0; i < nSize; ++i) { CKeyValue <TKey, TValue> keyValuePair = m_Array[i]; if (keyValuePair == null) { continue; } Int32 nCmpRet = keyValuePair.GetKey().CompareTo(key); if (nCmpRet == 0) { return(false); } if (nCmpRet > 0) { m_Array.Insert(i, newKeyValuePair); return(true); } } m_Array.Add(newKeyValuePair); return(true); }
/// <summary> /// 键值列表 /// </summary> /// <returns></returns> public List <TKey> KeyList() { List <TKey> keyList = new List <TKey>(); Int32 nSize = m_Array == null ? 0 : m_Array.Count; for (Int32 i = 0; i < nSize; ++i) { CKeyValue <TKey, TValue> keyValuePair = m_Array[i]; if (keyValuePair == null) { continue; } keyList.Add(keyValuePair.GetKey()); } return(keyList); }
/// <summary> /// 弹出队列头元素 /// </summary> /// <param name="rOutKey"></param> /// <param name="rOutValue"></param> /// <returns></returns> public bool PopFront(ref TKey rOutKey, ref TValue rOutValue) { if (m_Array == null || m_Array.Count <= 0) { return(false); } CKeyValue <TKey, TValue> keyValuePair = m_Array[0]; if (keyValuePair == null) { return(false); } m_Array.RemoveAt(0); rOutKey = keyValuePair.GetKey(); rOutValue = keyValuePair.GetValue(); return(true); }
/// <summary> /// 查找 /// </summary> /// <param name="key"></param> /// <param name="rOutValue"></param> /// <returns></returns> public bool QuickFind(TKey key, ref TValue rOutValue) { rOutValue = default(TValue); if (m_Array == null || m_Array.Count < 1) { return(false); } Int32 nFront = 0; Int32 nEnd = m_Array.Count - 1; Int32 nMid = (nFront + nEnd) / 2; while (nFront <= nEnd) { CKeyValue <TKey, TValue> keyValuePair = m_Array[nMid]; if (keyValuePair == null) { return(false); } int compare = keyValuePair.GetKey().CompareTo(key); if (compare == 0) { rOutValue = keyValuePair.GetValue(); return(true); } if (compare < 0) { nFront = nMid + 1; } else { nEnd = nMid - 1; } nMid = (nFront + nEnd) / 2; } return(false); }
/// <summary> /// 更新值 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public bool UpdateValue(TKey key, TValue value) { if (m_Array == null || m_Array.Count < 1) { return(false); } Int32 nFront = 0; Int32 nEnd = m_Array.Count - 1; Int32 nMid = (nFront + nEnd) / 2; while (nFront <= nEnd) { CKeyValue <TKey, TValue> keyValuePair = m_Array[nMid]; if (keyValuePair == null) { return(false); } int compare = keyValuePair.GetKey().CompareTo(key); if (compare == 0) { keyValuePair.SetValue(value); return(true); } if (compare < 0) { nFront = nMid + 1; } else { nEnd = nMid - 1; } nMid = (nFront + nEnd) / 2; } return(false); }