使用linq获取键的值

18

我有一个字符串类型的字典,想要使用 Linq 获取对应键的值。


3
如果你拥有了键,为什么要使用LINQ来获取值呢?为什么不直接使用 var value = myDictionary["myKey"]; 呢? - Øyvind Bråthen
字典<string, int> test = new Dictionary<string, int>(); - PramodChoudhari
5
这个问题仍然没有意义。不要考虑Linq,只需描述您已经拥有的和想要的结果。不要犯认为必须使用某种工具或模式的错误,因为可能并非如此。 - Quick Joe Smith
4个回答

51
为什么要使用LINQ从Dictionary中获取值?直接使用以下方法即可获取值:
int value = dictionary[key];

你可以使用Single,但这完全没有意义,反而增加了代码量:

var keyValuePair = dictionary.Single(x => x.Key == key);
int value = keyValuePair.Value;

2
我同意。使用LINQ会将O(1)的性能抛弃掉,转而使用O(N)。完全没有意义。 - Enigmativity
9
我为什么觉得你的 Linq 示例已经被用在某个生产环境的代码中了,这让我感到非常糟糕。 - Quick Joe Smith
1
@Quick Joe Smith - 我知道。我觉得我里面有点死了。 - djdd87
那又怎样,如果它已经进入了生产代码,有什么问题吗? - PositiveGuy
@CoffeeAddict:使用LINQ会将O(1)的性能抛弃掉,转而使用O(N)的性能。 - Rawling
1
如果键不存在,第一个示例会抛出以下错误:"System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary." 您需要先使用dictionary.ContainsKey(key)或dictionary.TryGetValue(key, out value)来检查并提取值。这样可以在一次查找中完成。 - Mark

14

为什么要使用 Linq,它不是内置的吗?

var val = myDict[key];

在有意义的情况下(查询集合),使用 Linq,而不是已经能够很好处理的 Dictionary 类。


LINQ有什么问题吗?如果它的语法更长,那又怎样呢?这是为了下次使用更多或不同的LINQ而存在的,并且易于阅读。当然,通过[]键访问最少的字符,但在这种情况下谁会关心呢?那么你说,LINQ查询字典会更慢?有人做过任何测试来证明这一点吗? - PositiveGuy
@CoffeeAddict - 我的观点是LINQ并不是万能的解决方案。有些东西,比如索引器,是应该使用语言特性而不是绕过它们使用LINQ。 - Oded
我同意它并不总是答案,但对于很多情况非常有用。我很想看到索引器和LINQ之间的性能比较。 - PositiveGuy
同时,这也是一些代码偏好的问题。我认为不好的是有些人谈论性能,但在某些情况下没有基准测试或真实测试来证明它。如果你要谈论性能,请提供证据。否则,这只是道听途说。我的意思是有些事情是显而易见的,但当你开始比较LINQ和其他东西时,你确实需要支持它。 - PositiveGuy

0

返回此特定实例中的字符串值。

    Disctionary<int, string> CustomValues = new Dictionary<int, string>();
    CustomValues[int]; //CustomValues[key];

0

获取字典键的值

Dictionary<int,string>dict=new Dictionary<int,string>();
dict.Add(1,"Maha");
dict.Add(2,"Malathi");
dict.Add(3,"Mithra");
dict.Add(4,"Saravana");

var val=dict.Where(x=>x.Key==key).Select(x=>x.Value);//get the value from dictionary where key=3
(or)
var val=dict[Key];//get the value for Dictionary key 3.

输出:Mithra


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接