-2

我试图找到有效的方法来遍历两个列表并根据两个列表中元素之间的匹配返回第二个列表的索引。然后使用索引从另一个数组中查找数据,因此第二个列表基本上保存了数组的位置。

两个 List 都是 RowType 类型,其中

public class RowType 
{
    public int Type; //Acts as a group
    public int SubType; //Specific classification of the type
}

我目前的方法是遍历第一个列表,然后对于每个元素,遍历第二个列表,比较 Type 或 Type\Subtype 组合以获得索引。这本质上是 O(n*m),它拖累了整体性能。

List1 可以包含 RowType 元素的组合,其中仅指定了 Type 或 Type 和 SubType 两者

List2 包含同时具有Type 和 SubType的元素。

在下面的示例中,T1 和 T2 是两种类型,R1 到 R16 是 SubType。SubType 在 Type 中是唯一的。所以 R1 是 T1 的子类型,那么没有其他类型将 R1 作为子类型。

Input
    List<RowType> list1 = new List<RowType>(){ T1, T2, RT3 }
    List<RowType> list2 = new List<RowType>(){ RT1, RT3, RT6, RT7, RT9 }

    where 
    RT1 -> Type = T1, SubType = R1
    RT3 -> Type = T3, SubType = R3
    RT6 -> Type = T1, SubType = R6
    RT7 -> Type = T2, SubType = R7
    RT9 -> Type = T4, SubType = R9

Expected Output
    0, 1, 2, 3  

Index 0 since T1 is Type for RT1
Index 2 since T1 is Type for RT6
Index 3 since T2 is Type for R7
Index 1 since RT3 matches RT3
4

1 回答 1

1

您可以首先迭代原始列表并将每个条目添加到字典中,其中键是列表中的元素,值是索引。只要您GetHashCode在 中正确覆盖,RowType您应该能够使用Dictionary<RowType, int>. 之后,迭代第二个列表并在字典中查找每个项目以确定其索引。这将产生 O(n + m) 但显然会占用更多内存。

于 2013-01-14T23:32:14.513 回答