Map,一个存放可重复key的无序列表


代码已经经过初步测试,未来会有更多的类方上来,包括

Hashtable 存放非重复key的无序列表(.net标准类库,不需要重写)

HashArray 存放非重复key的有序列表

Bag 存放重复key的有序列表

Map 存放重复key的无序列表

////////
using System;
using System.Collections;

namespace deltav.Collections
{

    
/// <summary>可以有键值重复的无序列表</summary>
    public class Map : IDictionary, IDisposable
    
{
        
Internal Data

        
Constructors

        
Internal Functions 

        
/// <summary>
        
/// 计算key对应的对象个数
        
/// </summary>
        
/// <param name="key">key</param>
        
/// <returns>对象个数</returns>

        public int CountKey(object key)
        
{
            
if (this.m_InternalData.ContainsKey(key))
                
return ((ArrayList)this.m_InternalData[key]).Count;
            
else
                
return 0;
        }


        
public void RemoveAt(object key, int index)
        
{
            
if (m_InternalData.ContainsKey(key))
            
{
                MakeKeyExist(key).RemoveAt(index);
                
--m_Count;
                
++m_Version;
            }

            
else
                
throw new ArgumentOutOfRangeException("index");
        }


        
public object this[object key, int index]
        
{
            
get
            
{
                
if (this.m_InternalData.ContainsKey(key))
                
{
                    
return MakeKeyExist(key)[index];
                }

                
else
                    
throw new ArgumentOutOfRangeException("index");
            }

            
set
            
{
                MakeKeyExist(key)[index] 
= value;
            }

        }


        IEnumerator GetEnumerator(
object key)
        
{
            
if (this.m_InternalData.ContainsKey(key))
                
return MakeKeyExist(key).GetEnumerator();
            
else
                
return null;
        }


        
Internal Enumerator

        
IDictionary Members

        
ICollection Members

        
IEnumerable Members

        
IDisposable Members
    }



}
原文地址:https://www.cnblogs.com/BigTall/p/64197.html