2015-11-07 33 views
1

使用winforms,Visual Studio 2013社区,C#。同步列表与另一个列表包含一些数据C#

我需要同步两个列表的顺序。其中一个列表包含一个索引,另一个包含该索引之外的选择。

例: 列表1包含:

[0]Data0 
[1]Data1 
[2]Data2 
[3]Data3 
[4]Data4 
[5]Data5 

和列表2包含了一些数据,但以不同的顺序:

[0]Data3 
[1]Data1 
[2]Data5 

我需要一些方法来获取订单投其所好因此列表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
List<string> orderedlistb = lista.Intersect(listb).ToList() 

这会遍历lista,创建所有在lista的元素也出现在listb的一个新的列表。

一般来说,当你这样做时,你需要确保你比较的对象是引用相等的,或者你已经正确地覆盖了GetHashCode()Equals(Object)这些对象。

在这种情况下,由于您只是使用字符串,所以您不必担心这一点。

+0

该列表实际上只是字符串,是否相交修改lista或返回列表? (例如,我可以做'listb = lista.intersect(listb).ToList()'? –

+1

@JasonBrown它返回一个新的列表。如果你愿意,你确实可以将结果分配给'listb'。 – TheInnerLight

相关问题