2012-11-14 25 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。你有一个字典,它是按键查找的最佳选择:如果你想要做的只是获取与一个键相关的值,你应该*不*遍历所有的条目。请注意,你甚至还没有解决这个问题 - 这是公认的不清楚 - 价值不是“双”,而是“列表”。 –

相关问题