2016-07-08 74 views
2

如何將Dictionary<DateTime, double>類型的字典轉換爲Tuple<List<DateTime>, List<double>>將字典轉換爲兩個列表的最佳方式

感謝

編輯:請問以下保證項目的兩個列表的順序是相同的? var abc = new Tuple<List<DateTime>, List<double>>(_data.Keys.ToList(), _data.Values.ToList());

+0

文件可能想看看['Keys'(https://msdn.microsoft.com/en-us/library/yt2fy5zk(V =保證vs.110).aspx)和['Values'](https://msdn.microsoft.com/en-us/library/ekcfxy3x(v = vs.110))。aspx)屬性 – grabthefish

+0

關於「Keys」和「Values」屬性的順序_ Dictionary .KeyCollection中的鍵的順序未指定,但與Dictionary .ValueCollection通過Values屬性返回的msdn頁面 – grabthefish

回答

5

簡單(順序保證的):

Tuple<List<DateTime>, List<double>> tuple 
        = Tuple.Create(dict.Keys.ToList(), dict.Values.ToList()); 

在Dictionary.ValueCollection的值的順序是不確定的,但它是相同的順序 在詞典相關聯的密鑰。 Key屬性返回KeyCollection 。

來源:MSDN

秩序保障的例子:

訂單甚至以後的更新,移除和增加保證。

Dictionary<int, string> dict = new Dictionary<int, string>(); 

dict[2] = "2"; 
dict[1] = "0"; 
dict[3] = "3"; 
dict[1] = "1"; 
dict[1] = "1"; 

dict.Remove(3); 

var tuple = Tuple.Create(dict.Keys.ToList(), dict.Values.ToList()); 
// 2 1 
// "2" "1" 
+0

感謝您的回答。您首先回答並提供了相同的解決方案,因此我將其標記爲答案。 –

2
var result = Tuple.Create(dict.Keys.ToList(), dict.Values.ToList()); 

根據您的評論的訂單問題:

什麼命令你會得到不保證,因爲字典不是一個有序集合。但可以保證在KeysValues集合中使用foreach(KeyValuepair<DateTime,double> kv in dict)

MSDN: Keys

在詞典按鍵的順序(TKEY的,TValue).KeyCollection 是不確定的,但它是相同的順序在 詞典相關聯的值(TKEY的, TValue).ValueCollection通過值 屬性返回。

MSDN: Values

在 字典的值的順序排列(TKEY的,TValue).ValueCollection是不確定的,但它是 相同的順序在 詞典相關聯的密鑰( TKey,TValue).KeyCollection由Keys 屬性返回。

你問:

因此,例如,dict[result.Item1[5]] == result.Item2[5]持有?

是的,這是根據上述

+0

這是否保證兩個列表中的項目順序都與原始字典內容匹配?如果我調用'result.Item1 [5]和result.Item2 [5]'這兩個項目將匹配其中一個詞典條目?以下情況會持續嗎? 'dict [result.Item1 [5] == result.Item2 [5]' –

+0

我上面舉了一個例子 –

+0

@MattWolf檢查我的回答 – user3185569