如何在字典中找到“第一个”值?

时间:2009-11-13 20:30:13

标签: c# c#-3.0 dictionary

如何找到MyTableClass继承Dictionary<int, MyTableClass>的{​​{1}}中的第一个值?我更喜欢属性或属性/方法组合,它返回字典中Field<F1, F2, F3>的第一个值。

我不想做的是F1 = MyEnum.value。在性能方面,这实际上不是首选方法。

4 个答案:

答案 0 :(得分:7)

找到符合某些条件的值的最短路径(我无法理解你想要的具体内容 - 首先F1是一个泛型类型参数,然后你使用==来比较它如果它是一个值...)是这样做的:

dictionary.Values.First(x => ...);

其中...将是x上的布尔表达式。但是,这不会比foreach 更快......因为您没有对字典键进行查找。只有键查找很快;除此之外,你必须进行线性扫描(或者为不同的密钥维护第二个字典,这将是你查找的任何内容)。 [从评论中复制]

答案 1 :(得分:6)

无论你如何在这里打扮,你基本上都需要对foreach中的值进行DictionaryDictionary<TKey,TValue>为给定值的完整密钥提供接近O(1)的访问权限。它的目的不是提供对部分密钥的有效访问。为了实现这一点,您需要保留第二个Dictionary实例进行适当的映射。

答案 2 :(得分:5)

字典在元素之间没有任何特定的顺序,所以除非你指定一些顺序,否则没有任何元素可以作为第一个元素。

你可以得到字典恰好找到的第一个项目:

MyTableClass one = dict.Where(pair => pair.Value.F1 == MyEnum.value).First();

这将循环遍历项目,直到找到匹配项,因此您只是将字典用作列表。如果你想要任何表演,你应该有一个字典,其中F1的值是关键。

答案 3 :(得分:2)

您可以使用.First()扩展方法。