迭代两个列表以获取索引位置

时间:2013-01-14 23:28:50

标签: c# .net

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

两个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

1 个答案:

答案 0 :(得分:1)

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