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

C# 迭代两个列表以获取索引位置,c#,.net,C#,.net,我试图找到一种有效的方法来遍历两个列表,并根据两个列表中元素之间的匹配返回第二个列表的索引。然后,索引用于从另一个数组中查找数据,这样第二个列表基本上占据了该数组的位置 这两个列表都是RowType类型,其中 public class RowType { public int Type; //Acts as a group public int SubType; //Specific classification of the type } 我当前的方法是迭代第一个列表,然后

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

这两个列表都是RowType类型,其中

public class RowType 
{
    public int Type; //Acts as a group
    public int SubType; //Specific classification of the type
}
我当前的方法是迭代第一个列表,然后对每个元素迭代第二个列表,比较类型或类型\子类型组合以获得索引。这本质上是O(n*m),它拖累了整体性能

列表1可以包含行类型元素的组合,其中只指定了类型,或者同时指定了类型和子类型

列表2包含同时具有类型和子类型的元素

在下面的例子中,T1和T2是两种类型,R1到R16是子类型。子类型在整个类型中是唯一的。所以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
输入
List list1=新列表(){T1,T2,RT3}
List list2=新列表(){RT1,RT3,RT6,RT7,RT9}
哪里
RT1->类型=T1,子类型=R1
RT3->类型=T3,子类型=R3
RT6->类型=T1,子类型=R6
RT7->Type=T2,SubType=R7
RT9->Type=T4,SubType=R9
预期产量
0, 1, 2, 3  
索引0,因为T1是RT1的类型
索引2,因为T1是RT6的类型
索引3,因为T2是R7的类型
由于RT3与RT3匹配,索引1

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

您可能会找到一个具有更好运行时性能特征的解决方案,但由于确定元素的索引需要至少访问一次,因此最有效的解决方案类别将产生O(n+m)。谢谢@Ameen。我考虑过这种方法,正如您提到的,它涉及内存占用。我将尝试一下,看看它在负载下表现如何。我们尝试了其他选项,这似乎对我们有效。我们为类型和子类型创建了两个int数组,类型和子类型的列表是预定义的。我们迭代输入列表,并根据元素使用一个魔术值标记int数组。对第二个列表进行迭代,并根据魔法值找到匹配项。这大大提高了响应时间,但每次操作需要两个int数组。您能更详细地描述一下您要做的事情吗?