“List<T>.Contains()"的效率高,还是 foreach循环的效率高? List<T>.Contains() 方法是基于什么实现的呢??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 问这种问题应该批评,因为起码你不能懒到连msdn都不看下。http://msdn.microsoft.com/zh-cn/library/bhkz42b3(v=vs.110).aspx说的很清楚此方法执行线性搜索;因此,此方法的运算复杂度是 O(n),其中 n 为 Count。结论就是和foreach的效率一样。 所以Contains里其实封装的就是for循环 问题:List<T>.Contains()方法,如果泛型集合中存在T1对象, 现在又有一个T2对象。 T1和T2它们是同一个类实例化出来的,但是有一个字段不一样,现在Contains(T2)是 判断为存在还是不存在??? 我喜欢CSDN啊,MSDN其实也有,但是看了之后不能确定。想问问大家的意见。 不知道 Any的效率 如何 List.Contains is a O(n) operation.Dictionary.ContainsKey is a O(1) operation T1.Contains(T2)??当然是不存在除非T1里放入T2,T2作为T1数组的一个元素 无语。难道任何两个能装入List<T>的不同的对象(不算继承关系)不都是“同一个类实例化出来”。如果Contains连这个都区分不了,要这个方法有什么用。 我不是说lz一个人,这种常识问题真的那么多人都搞不清楚么。我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。 如果一个查找不是线性查找,要么它要有索引的逻辑,要么内部使用binarytree一类的方式存储,要么需要获取对象的hash,如果它没有表现出这些外在特征,毫无疑问(都不需要查文档),肯定是线性查找。 此方法的运算复杂度是 O(n),其中 n 为 Count。结论就是和foreach的效率一样。 EqualityComparer<T> comparer = EqualityComparer<T>.Default; for (int i = 0; i < this._size; i++) { if (comparer.Equals(this._items[i], item)) { return true; } } return false;也是一个一个的比较是否相同... 我不是说lz一个人,这种常识问题真的那么多人都搞不清楚么。我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。 我不是说lz一个人,这种常识问题真的那么多人都搞不清楚么。我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。为什么Linq 消耗的资源那么多??? 我不是说lz一个人,这种常识问题真的那么多人都搞不清楚么。我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。为什么Linq 消耗的资源那么多???不是linq本身的问题,而是linq2ef/linq2sql,获取数据都需要转换为sql语句,如果你用any就直接转换为select exist/select top 1之类的代码,由数据库处理;如果你用foreach,那么就需要select *把整个数据集取出来再在内存里做查找。这是用linq2ef/linq2sql时候需要注意的地方。 我不是说lz一个人,这种常识问题真的那么多人都搞不清楚么。我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。为什么Linq 消耗的资源那么多???不是linq本身的问题,而是linq2ef/linq2sql,获取数据都需要转换为sql语句,如果你用any就直接转换为select exist/select top 1之类的代码,由数据库处理;如果你用foreach,那么就需要select *把整个数据集取出来再在内存里做查找。这是用linq2ef/linq2sql时候需要注意的地方。还是一码事啊,数据库还不得把所有的都拿出来遍历,当然做了索引神马的之后就是另外一回事了。 我不是说lz一个人,这种常识问题真的那么多人都搞不清楚么。我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。为什么Linq 消耗的资源那么多???不是linq本身的问题,而是linq2ef/linq2sql,获取数据都需要转换为sql语句,如果你用any就直接转换为select exist/select top 1之类的代码,由数据库处理;如果你用foreach,那么就需要select *把整个数据集取出来再在内存里做查找。这是用linq2ef/linq2sql时候需要注意的地方。还是一码事啊,数据库还不得把所有的都拿出来遍历,当然做了索引神马的之后就是另外一回事了。怎么可能是一码事?select *所有数据到一个datatable里,c#里循环找存在不存在 和数据库里直接select exists,性能差多少?! 我不是说lz一个人,这种常识问题真的那么多人都搞不清楚么。我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。为什么Linq 消耗的资源那么多???不是linq本身的问题,而是linq2ef/linq2sql,获取数据都需要转换为sql语句,如果你用any就直接转换为select exist/select top 1之类的代码,由数据库处理;如果你用foreach,那么就需要select *把整个数据集取出来再在内存里做查找。这是用linq2ef/linq2sql时候需要注意的地方。还是一码事啊,数据库还不得把所有的都拿出来遍历,当然做了索引神马的之后就是另外一回事了。怎么可能是一码事?select *所有数据到一个datatable里,c#里循环找存在不存在 和数据库里直接select exists,性能差多少?!第一看数据库配置。如果数据库被查询字段没有做索引,是一样的,需要从硬盘读取后遍历。当然,如果是常用数据,数据库会将数据驻留在内存中,就不需要再次读取硬盘。如果你的程序有缓存,那也差不多。当然在使用Linq2SQL的时候,还是推荐用any。如果对数据库不熟悉的话。 我不是说lz一个人,这种常识问题真的那么多人都搞不清楚么。我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。为什么Linq 消耗的资源那么多???不是linq本身的问题,而是linq2ef/linq2sql,获取数据都需要转换为sql语句,如果你用any就直接转换为select exist/select top 1之类的代码,由数据库处理;如果你用foreach,那么就需要select *把整个数据集取出来再在内存里做查找。这是用linq2ef/linq2sql时候需要注意的地方。还是一码事啊,数据库还不得把所有的都拿出来遍历,当然做了索引神马的之后就是另外一回事了。怎么可能是一码事?select *所有数据到一个datatable里,c#里循环找存在不存在 和数据库里直接select exists,性能差多少?!第一看数据库配置。如果数据库被查询字段没有做索引,是一样的,需要从硬盘读取后遍历。当然,如果是常用数据,数据库会将数据驻留在内存中,就不需要再次读取硬盘。如果你的程序有缓存,那也差不多。当然在使用Linq2SQL的时候,还是推荐用any。如果对数据库不熟悉的话。一样不一样自己试试就好了,(from x in xxx select x).Any()和(from x in xxx select x).ToArray().Any()自己看看差多少。 自定义控件的属性问题。 【求教SQLServer】这是SQL Server身份验证连接代码,我想改成Windows身份验证! 如何判断当前操作系统使用的桌面主题 StreamReader读取问题!~急 access怎么判断某张表是否存在主键????? ACCESS_VIOLATION,在线等 如何得到DataTable中已经被删除的行的集合? 深入.NET 4.0之,从“新”展望 C#连接数据库问题 在线等待 急急!!!!!!!!!!!! c#中类,组件,控件,类库,控件库各指什么? C# Excel 复杂格式读取 无法修改Control类型的属性的编辑器UITypeEditor
此方法执行线性搜索;因此,此方法的运算复杂度是 O(n),其中 n 为 Count。结论就是和foreach的效率一样。
问题:
List<T>.Contains()方法,如果泛型集合中存在T1对象, 现在又有一个T2对象。 T1和T2它们是同一个类实例化出来的,但是有一个字段不一样,现在
Contains(T2)是 判断为存在还是不存在???
我喜欢CSDN啊,MSDN其实也有,但是看了之后不能确定。想问问大家的意见。
Dictionary.ContainsKey is a O(1) operation
当然是不存在
除非T1里放入T2,T2作为T1数组的一个元素
如果Contains连这个都区分不了,要这个方法有什么用。
我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。
EqualityComparer<T> comparer = EqualityComparer<T>.Default;
for (int i = 0; i < this._size; i++)
{
if (comparer.Equals(this._items[i], item))
{
return true;
}
}
return false;也是一个一个的比较是否相同...
我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。
通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。
我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。
通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。为什么Linq 消耗的资源那么多???
我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。
通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。为什么Linq 消耗的资源那么多???
不是linq本身的问题,而是linq2ef/linq2sql,获取数据都需要转换为sql语句,如果你用any就直接转换为select exist/select top 1之类的代码,由数据库处理;
如果你用foreach,那么就需要select *把整个数据集取出来再在内存里做查找。
这是用linq2ef/linq2sql时候需要注意的地方。
我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。
通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。为什么Linq 消耗的资源那么多???
不是linq本身的问题,而是linq2ef/linq2sql,获取数据都需要转换为sql语句,如果你用any就直接转换为select exist/select top 1之类的代码,由数据库处理;
如果你用foreach,那么就需要select *把整个数据集取出来再在内存里做查找。
这是用linq2ef/linq2sql时候需要注意的地方。
还是一码事啊,数据库还不得把所有的都拿出来遍历,当然做了索引神马的之后就是另外一回事了。
我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。
通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。为什么Linq 消耗的资源那么多???
不是linq本身的问题,而是linq2ef/linq2sql,获取数据都需要转换为sql语句,如果你用any就直接转换为select exist/select top 1之类的代码,由数据库处理;
如果你用foreach,那么就需要select *把整个数据集取出来再在内存里做查找。
这是用linq2ef/linq2sql时候需要注意的地方。
还是一码事啊,数据库还不得把所有的都拿出来遍历,当然做了索引神马的之后就是另外一回事了。
怎么可能是一码事?select *所有数据到一个datatable里,c#里循环找存在不存在 和数据库里直接select exists,性能差多少?!
我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。
通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。为什么Linq 消耗的资源那么多???
不是linq本身的问题,而是linq2ef/linq2sql,获取数据都需要转换为sql语句,如果你用any就直接转换为select exist/select top 1之类的代码,由数据库处理;
如果你用foreach,那么就需要select *把整个数据集取出来再在内存里做查找。
这是用linq2ef/linq2sql时候需要注意的地方。
还是一码事啊,数据库还不得把所有的都拿出来遍历,当然做了索引神马的之后就是另外一回事了。
怎么可能是一码事?select *所有数据到一个datatable里,c#里循环找存在不存在 和数据库里直接select exists,性能差多少?!第一看数据库配置。如果数据库被查询字段没有做索引,是一样的,需要从硬盘读取后遍历。当然,如果是常用数据,数据库会将数据驻留在内存中,就不需要再次读取硬盘。如果你的程序有缓存,那也差不多。
当然在使用Linq2SQL的时候,还是推荐用any。如果对数据库不熟悉的话。
我是菜鸟,, any方法也是 通过枚举 集合来确定元素是否存在,应该与Contains一样。
通常来说是这样的,除了Linq2Sql/Linq2EF,对于表达式树做any和foreach耗费资源的结果就大大的不一样了。为什么Linq 消耗的资源那么多???
不是linq本身的问题,而是linq2ef/linq2sql,获取数据都需要转换为sql语句,如果你用any就直接转换为select exist/select top 1之类的代码,由数据库处理;
如果你用foreach,那么就需要select *把整个数据集取出来再在内存里做查找。
这是用linq2ef/linq2sql时候需要注意的地方。
还是一码事啊,数据库还不得把所有的都拿出来遍历,当然做了索引神马的之后就是另外一回事了。
怎么可能是一码事?select *所有数据到一个datatable里,c#里循环找存在不存在 和数据库里直接select exists,性能差多少?!第一看数据库配置。如果数据库被查询字段没有做索引,是一样的,需要从硬盘读取后遍历。当然,如果是常用数据,数据库会将数据驻留在内存中,就不需要再次读取硬盘。如果你的程序有缓存,那也差不多。
当然在使用Linq2SQL的时候,还是推荐用any。如果对数据库不熟悉的话。一样不一样自己试试就好了,(from x in xxx select x).Any()和(from x in xxx select x).ToArray().Any()自己看看差多少。