我正在尝试找到有效的方法来遍历两个列表,并根据列表中元素之间的匹配返回第二个列表的索引。然后使用索引从另一个数组中查找数据,因此第二个列表基本上保持数组的位置。
两个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
答案 0 :(得分:1)
您可以先迭代原始列表,然后将每个条目添加到字典中,其中键是列表中的元素,值是索引。只要您在GetHashCode
中正确覆盖RowType
,您就可以使用Dictionary<RowType, int>
。之后,迭代第二个列表并查找字典中的每个项目以确定其索引。这将产生O(n + m),但显然会有更多的内存占用。