如何找到MyTableClass继承Dictionary<int, MyTableClass>
的{{1}}中的第一个值?我更喜欢属性或属性/方法组合,它返回字典中Field<F1, F2, F3>
的第一个值。
我不想做的是F1 = MyEnum.value
。在性能方面,这实际上不是首选方法。
答案 0 :(得分:7)
找到符合某些条件的值的最短路径(我无法理解你想要的具体内容 - 首先F1
是一个泛型类型参数,然后你使用==
来比较它如果它是一个值...)是这样做的:
dictionary.Values.First(x => ...);
其中...
将是x
上的布尔表达式。但是,这不会比foreach
更快......因为您没有对字典键进行查找。只有键查找很快;除此之外,你必须进行线性扫描(或者为不同的密钥维护第二个字典,这将是你查找的任何内容)。 [从评论中复制]
答案 1 :(得分:6)
无论你如何在这里打扮,你基本上都需要对foreach
中的值进行Dictionary
。 Dictionary<TKey,TValue>
为给定值的完整密钥提供接近O(1)的访问权限。它的目的不是提供对部分密钥的有效访问。为了实现这一点,您需要保留第二个Dictionary
实例进行适当的映射。
答案 2 :(得分:5)
字典在元素之间没有任何特定的顺序,所以除非你指定一些顺序,否则没有任何元素可以作为第一个元素。
你可以得到字典恰好找到的第一个项目:
MyTableClass one = dict.Where(pair => pair.Value.F1 == MyEnum.value).First();
这将循环遍历项目,直到找到匹配项,因此您只是将字典用作列表。如果你想要任何表演,你应该有一个字典,其中F1的值是关键。
答案 3 :(得分:2)
您可以使用.First()扩展方法。