目的主要还是为了增加查询速度,如果有个List<MyClass>,我指定MyClass中的某个属性为索引,然后可以再List中快速检索到该字段,那该多爽,用遍历实在太慢了。。linq中的.Where()查找是不是也是遍历查找?
解决方案 »
- C#中如何编写同时处理若干个不同数据(类型是一样的)2
- JS怎么在火狐创建图片100分
- 求有C#图像编程方面的资料?
- C# 安装时如何加参数,如何打包SQL Server客户端连接组件,如何下载远程文件
- 泛型的find方法无效?
- C#如何产生16位md5
- winform datagrideview
- 服务程序与应用程序之间传递消息
- 关于继承TextBox控件的自定义控件问题!如何使完成后的控件在使用的时候,让它的Text属性为空,而不是与它的Name属性为同一值呢?
- 《21日学通C#》这本书怎么样?如果不好,那还有什么更好的书?
- 为什么ExecuteScalar返回object类型?
- 如何获取调用函数的窗体名?
SortedList<K,T> 等等结构。在内存中通常不搞什么复杂的结构,因为内存的查询遍历很快,你要确定维护额外的一堆结构远比简单地 Array.Sort 或者 List<T>.Sort 快很多,才需要使用额外的一堆结构。
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; }
}发个我自己常用的类,你可以改成多个索引
.net3.5还有HashSet这种。