2012-11-14 24 views
-1

我有一個詞典有5個不同的雙打在列表中。我知道列表中每個項目的順序。我試圖找到一行代碼,我可以在列表中查找列表中給定密鑰的特定值。列表<double>字典查找特定項目的價值

因此,像:

double myDbl = myDict["key"][value[3]]; 

是這樣的可能,我不能在任何地方找到它。由於

+0

聲明該詞典的詞典<字符串,列表>? – Alex

+1

你現在的問題很不清楚。我們幾乎不知道你的字典是如何聲明的,或者你的實驗結果如何。 –

+0

問題解決了,只需要一個[3],而不是尋找字典的值屬性 – Ron

回答

5

正如其他人所說,如果這是一個Dictionary<string, List<double>>可能只是使用

double value = myDict["key"][3]; 

然而,這條線:

我知道在列表中每個項目的順序。

讓我覺得實際上你應該重構你的代碼。如果你知道第一個項目總是代表一個數據(例如重量),下一個總是代表另一個(例如高度)等,那麼你應該創建一個具有這些屬性的新類型。爲此,使用List<double>會使代碼難以維護......它並不自然地顯示有關每個值的含義的信息。

一旦你把它改成,比方說,一個Dictionary<string, Person>你可以使用:

double height = myDict["key"].Height; 

這是顯著更清晰。

當然,這是可能的,你的意思是由我所引用的行別的東西......

+0

+1爲切斷這個問題的幽靈到獸的心臟。 (也許) – JDB

0

假設你有一個字典定義爲

Dictionary<string,List<double>> 

,並假設該詞典元素初始化正確,您可以執行以下操作:

myDbl = myDict["key"][3]; 
0

這也許應該是這樣的:

double myDbl = myDict["key"][3]; 

正如您在尋找索引3從結果列表從t他key

通過了解操作員執行的順序,您可以看到myDict["key"]將返回您的值類型,此處假定爲List<double>。從這個返回值開始,你想要得到第四個對象(基於0),所以你最後使用[3]

0

考慮:

Dictionary<string, List<double>> l_dict = new Dictionary<string, List<double>>(); 
l_dict.Add("key", new List<double>(new double[]{ 1, 2, 3, 4, 5 }); 

然後:

List<double> l_valueCollection = l_dict["key"]; 
double l_value = l_valueCollection[3]; 

或者,更簡潔( 「一班輪」 你想):

double l_value = l_dict["key"][3]; 
+0

謝謝,我很接近!我一直試圖尋找一個屬性「價值」,然後查找索引。那很簡單。謝謝 – Ron

+0

@Ron - 另請參閱Jon Skeet的答案。你可能會發現它更有幫助。不要忘記接受答案。 – JDB

0

如果您收藏看起來是這樣的:

Dictionary<string,List<double>> myDictionary; 

然後下面的工作:

double myDouble = myDictionary["key"][3]; 
0

創建一個像這樣的方法,可以返回您的值,不管您通過哪個鍵。

private double GetValue(Dictionary<string, double> dict, string key) 
    { 
     return (from pair in dict where pair.Key == key select pair.Value).FirstOrDefault(); 
    } 

請記住,這是一個使用LINQ,僅可使用.Net框架工作3.5

+0

爲什麼要將O(1)操作變成O(n)操作?使用TryGetValue可以更有效地實現相同的結果。哦,LINQ不需要.NET 4.0 - 它是在3.5中引入的。 –

+0

@JonSkeet因爲像這樣做是更好的做法,代碼是在同一個地方。 LINQ在3.5是我的錯誤。 –

+0

這絕對不是*更好的做法。我希望我能多次downvote。你有一個字典,它是按鍵查找的最佳選擇:如果你想要做的只是獲取與一個鍵相關的值,你應該*不*遍歷所有的條目。請注意,你甚至還沒有解決這個問題 - 這是公認的不清楚 - 價值不是「雙」,而是「列表」。 –

相關問題