如何獲得在所選擇的(的foreach)先前元件一些這樣dic[index -1].Key
字典LINQ選擇先前
new Dictionary<int, double>();
dic.Select(x => x.Value*(x.Equals(dic.FirstOrDefault()) ? x.Key : //x.Key - dic[index -1].Key//)).Sum()
如何獲得在所選擇的(的foreach)先前元件一些這樣dic[index -1].Key
字典LINQ選擇先前
new Dictionary<int, double>();
dic.Select(x => x.Value*(x.Equals(dic.FirstOrDefault()) ? x.Key : //x.Key - dic[index -1].Key//)).Sum()
Select
方法提供了一個索引作爲第二參數。
dic.Select((x, index) => dict[index])
如果你想選擇一個索引的元素,你可以使用ElementAt
dic.Select((x, index) => dic.ElementAt(index).Key)
以及如何你會用這個問題嗎? 'dict [index]'不會選擇「第n個」項;它會返回'index'是關鍵字的值。 – 2014-12-03 15:28:05
但是如何訪問密鑰,因爲字典[索引]。(僅限數值) - 我的字典包含例如:23,10.00; 150,56.7;我需要得到確切的關鍵 – AleksP 2014-12-03 15:34:14
@AleksP我已經更新了答案。事實上,我認爲只需要一個普通的'for'循環就可以輕鬆完成。 – 2014-12-03 15:36:35
如果使用OrderedDictionary
那麼它可能會更快地使用直foreach
:
double sum = 0.0;
int prev = 0;
foreach(var kvp in dic)
{
sum += kvp.Value * (kvp.Key - prev);
prev = kvp.Key;
}
在任何情況下,我會首先想出工作然後重新構成如果你能使它更好更好。 「更好」可能不會使用Linq;在大多數情況下,難以理解和調試的令人費解的Linq查詢比干淨,高效的循環更糟糕。
字典無序。 'FirstOrDefault()'在這裏無法正常工作。 – SLaks 2014-12-03 15:25:30
你能擴展你的答案並告訴我們爲什麼你需要這樣做嗎?它會幫助我們幫你 – 2014-12-03 15:25:35
字典沒有訂單。如果你使用了'OrderedDictionary',那麼'foreach'可能會更清潔,因爲你需要跟蹤「最後一個」鍵。 – 2014-12-03 15:26:04