我有以下情形:我應該如何「合併」多個詞典到C#中的「聚合」?
GetDict()
返回Dictionary<double, double>
對象和在一個循環中被稱爲若干次(由用戶指定的這個數)的函數。返回的字典總是保證包含相同的一組鍵(我現在假設這是簡單的)。
我的目標是最終讓所有的值的平均值爲每個鍵返回:
public Dictionary<double, double> CalculateAveragePerKey(int N)
{
var aggregateDict = new Dictionary<double, double>();
for(int i=0; i < N; i++)
{
var returnedDict = GetDict();
// aggregateDict -- how to calculate an average of values for each key?
}
return aggregateDict;
}
public Dictionary<double, double> GetDict()
{
var newDict = new Dictionary<double, double>();
// populate the newDict, always guaranteed (assumed for simplicity)
// to contain the same set of keys ...
return newDict;
}
所以,如果N = 3和內環路,詞典返回包含該鍵10.0
值1.0
,2.3
和3.0
,結尾aggregateDict
的密鑰10.0
的值應該爲2.1
。
如果這不是解決這類問題的最好的數據結構或方法,我肯定可以重構我的代碼以使用其他數據結構或方法。我只是在尋找最有效的方法。
'double'是用於字典的關鍵字的一種非常糟糕的類型,因爲浮點精度錯誤通常會導致您希望相等的數字不相等,再加上基於哈希的結構不符合這一事實, t'確實處理模糊的平等。 – Servy
我沒有想到這一點。那麼我還能怎麼解決這個問題呢?我應該使用二維數組來存儲鍵值對嗎? (我也可以在預處理過程中將我的密鑰投射到GetDict()中,但是有更好的選擇嗎?) – ubuntunoob
這是功課嗎?你有沒有試圖自己解決這個問題? – MgSam