- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
考虑这段代码:
int size = 100 * 1000 * 1000;
var emu = Enumerable.Range(0, size);
var arr = Enumerable.Range(0, size).ToArray();
当我调用 emu.ElementAt(size-10) 和 arr.ElementAt(size-10) 并测量时间时,arr 快得多(数组为 0.0002 秒,而 IEnumerable 为 0.59 秒)。
据我了解,扩展方法 ElementAt() 具有签名
public static TSource ElementAt<TSource>(this IEnumerable<TSource> source, int index)
并且由于“源”是一个 IEnumerable,执行的逻辑将是相似的 - 与我在直接访问数组的地方看到的相反。
有人可以解释一下吗:)
最佳答案
调用 ElementAt
在 IEnumerable<T>
上将循环遍历项目,直到它到达所需的索引。 (一个 O(n) 操作)
调用 ElementAt
在 IList<T>
上(例如数组)将使用 IList<T>
的索引器立即获得所需的索引。 (一个 O(1) 操作)
关于c# - 了解扩展 ElementAt(index),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3180091/
在我的代码中,我得到了一个 ConcurrentDictionary,现在我想遍历 Dictionary 中的每个元素,但是如果条件为真,我想从这个 Dictionary 中删除一个元素,所以我不能使
我有这段代码从列表的计数 (-1) 中获取一个随机数,然后获取该索引处的元素。然后我从该列表中删除该对象并调用代码,直到所有对象都从该列表中消失。 我有点困惑,为什么会有 13 个索引 (0-12),
IGrouping 支持 ElementAt 方法来索引分组的集合。那么为什么方括号运算符不起作用呢? 我可以做类似的事情 list.GroupBy(expr).Select(group => gr
考虑这段代码: int size = 100 * 1000 * 1000; var emu = Enumerable.Range(0, size); var arr = Enumerable.Rang
Enumerable.ElementAt(TSource) 方法的 MSDN 库条目说 "If the type of source implements IList, that implementa
我有一个字典,我需要用传入数据保持更新,在解析传入数据后,我必须检查字典中是否有任何条目不存在于传入数据中(解析时的传入数据是一个列表我需要将其与字典条目进行映射)。 为了避免多次循环删除条目,我为字
我有一个字典,我需要遍历其中的元素并进行更改。我不能使用 foreach 语句,因为它有时会抛出 InvalidOperationException,表示在枚举期间无法修改集合。 我可以使用 for
我的部分代码遇到了困难: private void UpdateOutputBuffer() { T[] OutputField = new T[DisplayedLe
IEnumerable公开一个枚举器,因此可以枚举对象。此接口(interface)公开的索引没有任何内容。 IList关于索引,因为它公开了 IndexOf方法。 那么 Enumerable.Ele
我遇到的问题是,在创建类型为 List 的对象“oListType01”并将其分配给类型为“object”的另一个对象“oObjectType”之后,我无法再访问任何函数“ElementAt(1)”
var ints = [0, 1, 2, 3]; var foo = ints.elementAt(1); var bar = ints[1]; assert(foo == bar); 两者 elem
请注意,我目前正在学习 C# 并在遇到这个障碍时翻阅教科书。 你怎么称呼ElementAt来自 IEnumerable ?this中的第二条评论 所以问题提到了它,但我只是收到一个错误。 Here他们
为什么字典在动态规划期间“不包含‘ElementAt’的定义” Dictionary D1 = new Dictionary(); D1.Add("w1", 10);
我想获取列表的方法“ElementAt”的 MethodInfo。 MethodInfo method = obj.GetType().GetMethod("ElementAt"); 但是,“方法”是
在 LINQ to SQL 中,尝试对从 LINQ to SQL 查询返回的 IQueryable 使用 ElementAt 扩展方法时,出现异常“不支持查询运算符‘ElementAt’。”。 这是堆
我正在使用方法 Queryable.ElementAt(Int32) 来获取查询结果的特定元素。 IQueryable entities = db.MyEntities.Where(p => p.Fo
这似乎是一个愚蠢的问题,但我还没有找到答案,所以就在这里。 :) 在这两种情况下,如果您未能检查集合的边界,您将得到一个“超出范围”的异常。这只是编码风格偏好吗? 如果有人需要示例: List myL
我目前正在构建一个非常依赖效率的数据结构。 任何人都可以向我提供有关 Find(item => item.X = myObject.Property) 方法实际工作原理的资源吗?它是否在所有元素中线性
Linq 中是否有与ElementAt 相同的方法?除了它返回 IEnumerable使用单个元素,而不是实际元素?是不是有一些SelectRange(startIndex, endIndex)我可以
我使用 (ElementAt,Count) 和 (foreach) 遍历 IEnumerable 作为 Linq 查询的结果。令我惊讶的是,性能差异是 25-30 倍!这是为什么? IEnumerab
我是一名优秀的程序员,十分优秀!