[英]How to optimise this LINQ Query
我有這個查詢
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之間(包括兩者)。 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個項目。 因此索引將不同,並且您從Sex [i]獲得的每一行的值將不同
例如
Dasha[0] != Dasha.Where(x => x[15] == 9)[0]
除非Dasha [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++;
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.