在C#中从字符串数组中删除重复字符串的有效方法

我想知道一种从C#中的字符串数组中删除重复项的有效方法。 例如,
string[] a = { "abc", "xyz","abc", "def", "ghi", "asdf", "ghi","xd", "abc" };
会变成,
string[] a = { "abc", "xyz","def", "ghi", "asdf", "xd" };
删除重复条目后如何填补空白? 有没有办法在不使用额外数组存储元素的情况下执行此操作? 我使用的方法:
1) Sorted the array

2) Replaced the duplicate entries with null

3) Copied NOT null string to a new array.
但寻找一种优化的方法来做同样的事情。 编辑:我使用的是.NET 2.0和VS 2005     
已邀请:
您可以使用HashSet:
string[] a = { "abc", "xyz","abc", "def", "ghi", "asdf", "ghi","xd", "abc" };
var b = new HashSet<string>(a);
    
您无法在.NET中调整数组大小,因此无论您使用何种方法删除重复项,都必须为结果创建一个新数组。 您可以使用
HashSet<string>
轻松删除重复项:
a = new HashSet<string>(a).ToArray();
哈希集将数组中的项添加到自身,并自动丢弃重复项。由于哈希集使用哈希码来检查现有项目,这比排序项目要快一些,但结果当然没有排序。     
看一下IEnumerable.Distinct()方法     
如果使用.NET 3.0,您可以使用LINQ:
using System;
using System.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] a = { "abc", "xyz", "abc", "def", "ghi", "asdf", "ghi", "xd", "abc" };
            string[] b = a.Distinct().ToArray();
            foreach (string s in b)
                Console.WriteLine(s);
            Console.ReadLine();
        }
    }
}
    

要回复问题请先登录注册