将List与另一个包含某些数据C的列表同步

时间:2015-11-07 19:10:04

标签: c# list sorting

使用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添加了“字符串”的顺序。 (我目前手工插入插件)。

1 个答案:

答案 0 :(得分:1)

List<string> orderedlistb = lista.Intersect(listb).ToList()

这将迭代lista,创建listalistb中也出现的所有元素的新列表。

通常,当您执行此操作时,您需要确保要比较的对象是相同的引用,或者您已为这些对象正确覆盖GetHashCode()Equals(Object)

在这种情况下,由于您只是使用字符串,因此无需担心这一点。