创建一个双键的集合

时间:2010-11-18 16:21:33

标签: vb.net collections

我在vb.NET中有一组对象。每个对象都有两个不同的ID,我们称之为ID1和ID2。

我需要能够根据其中一个ID快速找到集合中的特定对象。在某些情况下,我有ID1,在其他情况下,我有ID2。我目前正在使用ID1作为键的Collection数据结构,但是当我需要使用ID2查找对象时,这对我没有帮助。

是否有更好的数据结构可供使用?

由于

1 个答案:

答案 0 :(得分:1)

如果您确实需要快速数据访问,则不会使用两个数据结构,一个映射ID1 - > yourObject和另一个映射ID2 - > yourObject。我推荐使用泛型Dictionary(Of TKey, TValue)类而不是(有点过时的)Collection类,它主要是VB6兼容性的东西。如果您采用双数据结构方法,则必须手动使它们保持同步。 (您应该为此创建一个单独的类TwoKeyDictionary,其中所有同步逻辑都是集中的。)

另一方面,如果性能是一个问题,您可以使用任意数据结构(甚至列表或集合)并使用LINQ轻松访问:

Dim lst As List<MyClass> = ...
Dim myObject = (From entry In lst Where entry.ID1 = ...).FirstOrDefault()

当然,如果ID1或ID2只需要快速访问,您可以使用组合方法。然后你可以根据ID1创建一个字典,并使用LINQ通过ID2搜索这个字典。