Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 索引
        /// </summary>
        /// <param name="nIndex"></param>
        /// <returns></returns>
        public TValue ValueIndexOf(Int32 nIndex)
        {
            CKeyValue <TKey, TValue> keyValuePair = IndexOf(nIndex);

            if (keyValuePair == null)
            {
                return(default(TValue));
            }
            return(keyValuePair.GetValue());
        }
Exemplo n.º 3
0
        /// <summary>
        /// 值列表
        /// </summary>
        public List <TValue> ValueList()
        {
            List <TValue> valueList = new List <TValue>();
            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;
                }
                valueList.Add(keyValuePair.GetValue());
            }
            return(valueList);
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        /// <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);
        }
Exemplo n.º 6
0
        /// <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);
        }