首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请问c#是否有类似于数据库中索引一样的机制

2012-09-24 
请教c#是否有类似于数据库中索引一样的机制目的主要还是为了增加查询速度,如果有个ListMyClass,我指定My

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

[解决办法]
hashtabel
dictionary

[解决办法]

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

[解决办法]
C# code
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; }}
[解决办法]
HashTable、Dictionary,
.net3.5还有HashSet这种。

热点排行