【发布时间】:2012-11-26 19:53:11
【问题描述】:
我很难通过以下示例切换到 LINQ:
int[] inputs = { 5, 3, 5, 66, 4, 5 };
int[] indexes; // I want to have the indexes of '5's in
// the inputs array, which is { 0, 2, 5 }
// My way (traditional for loop)
List<int> indexesList = new List<int>();
for (int i = 0; i < inputs.Length; i++)
if (inputs[i] == 5)
indexesList.Add(i);
indexes = indexesList.ToArray();
// LINQ way
var indexes = inputs.Select((s, i) => new { i, s })
.Where(t => t.s == 5)
.Select(t => t.i).ToArray();
问题 1. 就效率(速度、内存使用)而言,如果我将代码转换为 LINQ,我会有什么优势吗?
问题 2。如果为真,是否有更优雅的方式使用 LINQ 来解决问题?
PS:请注意,这个方法在我的实际项目中被非常频繁地调用。因此,在速度或内存使用方面稍有改进将对整个过程有很大帮助。
【问题讨论】:
-
inputs中平均有多少个元素。优化取决于非常具体的情况。 -
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
@igrimpe,
inputs是一个包含784元素的数组。但是,我调用这个方法的次数超过了10k次。