使用winforms,Visual Studio 2013社区,C#。
我需要同步两个列表的顺序。其中一个列表包含一个索引,另一个包含该索引中的选择。
实施例: 清单1包含:
[0]Data0
[1]Data1
[2]Data2
[3]Data3
[4]Data4
[5]Data5
并且列表2包含一些数据但是在不同的顺序中:
[0]Data3
[1]Data1
[2]Data5
我需要一些方法让订单匹配,以便List 2看起来像这样:
[0]Data1
[1]Data3
[2]Data5
示例代码:
public List<string> lista = new List<string>();
public List<string> listb = new List<string>();
public void fillListA(string mockstring)
{
for(i=0;i<750000;i++)//just to give Idea of the number of Strings in the List
{
lista.add(mockstring + i.ToString());//Fill List with data
}
}
OnClickEventHappens(string SelectedFromListA)//Mock event that fires if The user clicks on a string in ListA (As its displayed in a label on form1)
{
if(listb.Contains(SelectedFromListA))
{
listb.Remove(SelectedFromListA);
}
else
{
listb.Add(SelectedFromListA);
}
}
通过执行上述操作由于用户可以在任何位置单击lista中的任何“字符串”,因此listb最终完全无组织。 (因为你可以“点击”lista [5],lista [1]并且有足够的东西来混淆订单)
我不想每次都进行迭代它也会改变(Listb显示在不同的选项卡上,所以我可以在它显示之前对其进行排序,但是将它同步到较小的部分而不是循环整个列表会很好)
我需要保留它们的顺序是Lista添加了“字符串”的顺序。 (我目前手工插入插件)。
答案 0 :(得分:1)
List<string> orderedlistb = lista.Intersect(listb).ToList()
这将迭代lista
,创建lista
中listb
中也出现的所有元素的新列表。
通常,当您执行此操作时,您需要确保要比较的对象是相同的引用,或者您已为这些对象正确覆盖GetHashCode()
和Equals(Object)
。
在这种情况下,由于您只是使用字符串,因此无需担心这一点。