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