2014-12-07 62 views
0

我有<int, bool>,如何解决以下独特的发现问题?

1, false; 2 true;... ; 9 true;

我需要找出是否有一个独特的字典。

例如,如果所有除9都是假的,我可以输出9

如何实现这一目标?

+0

是键连续整数? – 2014-12-07 11:18:25

+1

您可以按值(按IEnumerable对待)进行分组,并检查密钥的数量。 – 2014-12-07 11:19:30

回答

3

您可以通过Value组,并得到有一个项目组:

var result = dictionary 
      .GroupBy(x => x.Value) 
      .First(g => g.Count() == 1) // get the group 
      .First().Key; // get the first pair in the group and it's key 

这将抛出异常,如果没有独特的价值,防止这种情况,你可以使用:

var result = dictionary 
      .GroupBy(x => x.Value) 
      .FirstOrDefault(g => g.Count() == 1); 

if(result != null) 
{ 
    var value = result.First().Key; 
} 
+0

如此强大!我第一次看到Linq的力量。对于新手的问题,如果没有这样的项目,结果是什么,NULL? – 2014-12-07 13:21:54

+0

有例外:) – 2014-12-07 13:22:20

+0

有没有办法避免异常? – 2014-12-07 13:23:36