目的主要还是为了增加查询速度,如果有个List<MyClass>,我指定MyClass中的某个属性为索引,然后可以再List中快速检索到该字段,那该多爽,用遍历实在太慢了。。linq中的.Where()查找是不是也是遍历查找?

解决方案 »

  1.   


    SortedList<K,T> 等等结构。在内存中通常不搞什么复杂的结构,因为内存的查询遍历很快,你要确定维护额外的一堆结构远比简单地 Array.Sort 或者 List<T>.Sort 快很多,才需要使用额外的一堆结构。
      

  2.   


    using System.Collections.Generic;
    public class MyClassCollection : IEnumerable<MyClass>
    {
        private List<MyClass> _Items = new List<MyClass>();
        private Dictionary<object, int> _Key = new Dictionary<object, int>();
        public int IndexOf(MyClass item)
        {
            return _Items.IndexOf(item);
        }
        public bool Contains(string key)
        {
            return _Key.ContainsKey(key);
        }
        public bool Contains(MyClass item)
        {
            return _Items.Contains(item);
        }
        public MyClass this[int i]
        {
            get
            {
                if (i >= 0 && i < Count)
                {
                    return _Items[i];
                }
                else
                {
                    return null;
                }
            }
        }
        public MyClass this[object key]
        {
            get
            {
                if (_Key.ContainsKey(key))
                {
                    return _Items[_Key[key]];
                }
                else
                {
                    return null;
                }
            }
        }
        public string CommandString { get; set; }
        public bool Add(MyClass item)
        {
            if (_Items.Contains(item))
                return false;
            _Key.Add(item.Key.Trim().ToLower(), _Items.Count);
            _Items.Add(item);
            return true;
        }
        public bool Remove(object key)
        {
            if (_Key.ContainsKey(key) == false)
                return false;
            return this.RemoveAt(_Key[key]);
        }
        public bool Remove(MyClass item)
        {
            if (_Items.Contains(item) == false)
                return false;
            return this.RemoveAt(_Items.IndexOf(item));
        }
        public bool RemoveAt(int i)
        {
            if (i < 0 || i > _Items.Count - 1)
                return false;
            _Key.Remove(_Items[i].Key);
            _Items.RemoveAt(i);
            if (i < _Items.Count)
            {
                for (int j = i; j <= _Items.Count - 1; j++)
                {
                    _Key[_Items[j].Key.Trim().ToLower()] = j;
                }
            }
            return true;
        }
        public void Clear()
        {
            _Items.Clear();
            _Key.Clear();
        }
        public int Count
        {
            get { return _Items.Count; }
        }    public System.Collections.Generic.IEnumerator<MyClass> GetEnumerator()
        {
            return _Items.GetEnumerator();
        }    public System.Collections.IEnumerator GetEnumerator1()
        {
            return GetEnumerator();
        }
        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return GetEnumerator1();
        }
    }
    public class MyClass
    {
        public string Key { get; set; }
        public string Value1 { get; set; }
        public string Value2 { get; set; }
        public string Value3{ get; set; }
    }发个我自己常用的类,你可以改成多个索引
      

  3.   

    HashTable、Dictionary,
    .net3.5还有HashSet这种。