假设我有两个列表list 1和list 2。列表一有字符串"ABCD"清单2的项目与清单1相同,但增加了一些项目。我想把它们组合起来,使它成为一个包含所有可能的值而不重复的列表。所以我想要ABCD1234在第三个列表
这是我所拥有的
ArrayList list1 = new ArrayList();
list1.Add("A");
list1.Add("B");
list1.Add("C");
list1.Add("D");
ArrayList list2 = new ArrayList();
list2.Add("1");
list2.Add("A");
list2.Add("2");
list2.Add("3");
list2.Add("C");
list2.Add("4");
list2.Add("D");
ArrayList list3 = new ArrayList();
foreach(var item in list1)
{
list3.Add(item);
}
foreach (var item in list1)
{
foreach (var item2 in list2)
{
//if the item2 is not at all in the first list add it to the 3rd list
}
}
Console.ReadLine();
我弄清楚这一点的原因是因为我在做别的事情,我从一个数组列表中的一个reg键安装的所有软件,然后从一个不同的reg键安装在第二个数组列表中的所有软件,我想创建一个所有安装的软件的组合列表,而不是重复显示自己。除了c#,我在其他语言中也看到了类似的东西,所以我想我应该问一下c#。谢谢你
你不应该使用ArrayList
,它是。net框架1.0(2002年)的过时数据结构。使用List<T>
代替。net framework 2.0及以后版本(2005年)。
你可以使用。net框架3.5及更高版本(2008年)的Linq来构建一个具有不同项的列表:
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
var list1 = new List<string> { "A", "B", "C", "D" };
var list2 = new List<string> { "1", "A", "2", "3", "C", "4", "D" };
var list3 = list1.Concat(list2).Distinct().ToList();
foreach (var item in list3)
{
Console.WriteLine(item);
}
}
}
}
还有一些其他的选择。如果只需要一个可枚举对象,可以使用以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
var list1 = new List<string> { "A", "B", "C", "D" };
var list2 = new List<string> { "1", "A", "2", "3", "C", "4", "D" };
var distinctItems = list1.Concat(list2).Distinct();
foreach (var item in distinctItems)
{
Console.WriteLine(item);
}
}
}
}
如果你想要一个有不同项的数据结构,你可以使用HashSet<string>
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
var list1 = new List<string> { "A", "B", "C", "D" };
var list2 = new List<string> { "1", "A", "2", "3", "C", "4", "D" };
var distinctItems = new HashSet<string>(list1.Concat(list2));
foreach (var item in distinctItems)
{
Console.WriteLine(item);
}
}
}
}