【问题标题】:Syncing List with another List containing Some data C#将列表与另一个包含一些数据的列表同步 C#
【发布时间】:2015-11-07 19:10:04
【问题描述】:

使用 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

我需要一些方法来匹配订单,以便列表 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 添加“字符串”的顺序。 (我目前使用 Inserts 手动完成)。

【问题讨论】:

    标签: c# list sorting


    【解决方案1】:
    List<string> orderedlistb = lista.Intersect(listb).ToList()
    

    这将迭代lista,创建一个包含lista 中所有元素的新列表,这些元素也出现在listb 中。

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

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

    【讨论】:

    • 列表实际上只是字符串,Intersect 是修改列表还是返回列表? (例如我可以listb = lista.intersect(listb).ToList()吗?
    • @JasonBrown 它返回一个新列表。如果您愿意,您确实可以将结果分配给listb
    猜你喜欢
    • 2016-04-18
    • 2011-10-04
    • 2013-12-15
    • 2018-04-05
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多