簡體   English   中英

如何優化此LINQ查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM