Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何基于其他两个列表创建差异列表并包含重复项_C# - Fatal编程技术网

C# 如何基于其他两个列表创建差异列表并包含重复项

C# 如何基于其他两个列表创建差异列表并包含重复项,c#,C#,我有两张单子 List<string> list1 as new List<string>(); 对于上面的例子,它工作得很好 例2: 列表1包含(Test1、Test1、Test2、Test2) 列表2是空的 我希望我的新列表包含所有内容(Test1、Test1、Test2、Test2) 如果我使用与上面使用的方法相同的Except方法,我将得到我的新列表(Test1,Test2) 有没有一种方法可以包含副本 最后再举一个例子,希望能清楚地知道我在寻找什么 列表1包含

我有两张单子

List<string> list1 as new List<string>();
对于上面的例子,它工作得很好

例2: 列表1包含(Test1、Test1、Test2、Test2) 列表2是空的

我希望我的新列表包含所有内容(Test1、Test1、Test2、Test2)

如果我使用与上面使用的方法相同的Except方法,我将得到我的新列表(Test1,Test2)

有没有一种方法可以包含副本

最后再举一个例子,希望能清楚地知道我在寻找什么 列表1包含(Test1、Test2、Test2、Test3、Test4) 列表2包含(Test1、Test2、Test5、Test6)

我希望我的新列表包含(Test2、Test3、Test4、Test5、Test6)


还有一件事是list1和list2没有特定的顺序,newlist也不需要有任何特定的顺序。

我认为使用开箱即用的工具很难获得您想要的东西。实际上,您需要做的是“汇总”这两个列表,例如每个项目的计数,然后从这里开始,对项目执行不同的操作,然后对计数执行不同的操作。

更新:我已将以前的代码压缩为更小的代码:

var list1 = new List<string>() { "Test1", "Test2", "Test2", "Test3", "Test4" };
var list2 = new List<string>() { "Test1", "Test2", "Test5", "Test6" };

var newlist = new List<string>();
list1.ForEach(delegate(string s) { if (!list2.Remove(s)) newlist.Add(s); });
newlist = newlist.Concat(list2).ToList();
var list1=newlist(){“Test1”、“Test2”、“Test2”、“Test3”、“Test4”};
var list2=new List(){“Test1”、“Test2”、“Test5”、“Test6”};
var newlist=新列表();
list1.ForEach(委托(字符串s){if(!list2.Remove(s))newlist.Add(s);});
newlist=newlist.Concat(list2.ToList();

这篇文章你得自己写。除了之外,
的工作方式可能是将第一个集合中的所有元素放入一个等价的
哈希集
中,然后删除第二个集合中的所有项目

我要做的是类似的事情:将第一个集合中的所有内容放入一个
字典
,其值对应于出现计数。枚举第二个集合时,从这些计数中减去。然后根据减法后更新的计数重建列表

这有意义吗

newlist = list1.Except(list2).ToList();
var list1 = new List<string>() { "Test1", "Test2", "Test2", "Test3", "Test4" };
var list2 = new List<string>() { "Test1", "Test2", "Test5", "Test6" };

var newlist = new List<string>();
list1.ForEach(delegate(string s) { if (!list2.Remove(s)) newlist.Add(s); });
newlist = newlist.Concat(list2).ToList();