如何优化此 LINQ 查询
本文关键字:LINQ 查询 优化 何优化 | 更新日期: 2023-09-27 18:34:01
我有这个查询
Dasha.Where(x => x[15] == 9).ForEachWithIndex((x,i) => dd[Sex[i]][(int)x[16]]++);
此查询正在Dasha
中找到第 15 个索引值为 9 的元素,如果是,则递增 dd[Dashaindex][x[16]] 值。
这里 Dasha 是 double[100][50]
,dd 是 double[2][10]
,是 byte[ ],并且只能有值 0 或 1。 0 表示男性,1 表示女性
x[15] 只能介于 0 到 9 之间(包括 0 和 9)。x[16]的规则相同。
它给了我正确的结果。
我尝试将其优化为
Dasha.ForEachWithIndex((x,i) =>
{
if(x[15] == 9)
dd[Sex[i]][(int)x[16]]++
});
这给了我错误的结果。我哪里做错了?
我的ForEachWithIndex
就像
static void ForEachWithIndex<T>(this IEnumerable<T> enu, Action<T, int> action)
{
int i = 0;
foreach(T item in enu)
action(item, i++);
}
这只是关于
Dasha.ForEachWithIndex((x,i) => {
if(x[15] == 9)
dd[Sex[i]][(int)x[16]]++ });
这给了我错误的结果。我哪里做错了?
在第一种情况下,您将包含 100 个项目的 Dasha 列表筛选为 n 个项目,然后迭代这 n 个项目。
在第二种情况下,您遍历所有 100 个项目。所以索引会不同,你从[i] 获得的每一行的值也会不同
例如
Dasha[0] != Dasha.Where(x => x[15] == 9)[0]
除非达沙[0][15] == 9
您需要
在Where
之前保存原始索引:
Dasha.Select((x,i) => new {x = x, i = i})
.Where(a => a.x[15] == 9)
.ForEach(a => dd[Sex[a.i]][(int)a.x[16]]++);
下面将为您提供与第一次查询相同的结果。
int counter=0;
Dasha.ForEachWithIndex((x,i) =>
{
if(x[15] == 9)
{
dd[Sex[counter]][(int)x[16]]++;
counter++;
}
})