C# 如果项目不在数组列表中,则将项目添加到数组列表中

C# Adding a item into an arraylist if the item is not already inside that arraylist

假设我有两个列表,列表 1 和列表 2。列表 1 有字符串“ABCD”,列表 2 有与列表 1 相同的项目,但有一些附加项目“1A23C4D”,我想将它们组合起来它是一个包含所有可能值且不重复的列表。所以我希望 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();

我弄清楚这一点的原因是因为我在做其他事情,我从一个数组列表中的一个注册表项安装了所有软件,然后从另一个数组列表中安装了另一个注册表项的所有软件,我想要创建所有已安装软件的组合列表,这些软件不会重复显示。我看到除了 c# 以外的其他语言发布的与此类似的内容,所以我认为 id 要求 c#。谢谢

您不应该使用 ArrayList,它是 .net framework 1.0(2002 年)中的一种陈旧数据结构。使用 List<T> 而不是 .net framework 2.0 及更高版本(2005 年)。

您可以使用 .net framework 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);
            }
        }
    }
}