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

时间:2011-04-11 07:57:19

标签: c# visual-studio-2005 .net-2.0 duplicate-removal

我想知道一种从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

4 个答案:

答案 0 :(得分:12)

您可以使用HashSet:

string[] a = { "abc", "xyz","abc", "def", "ghi", "asdf", "ghi","xd", "abc" };
var b = new HashSet<string>(a);

答案 1 :(得分:7)

您无法在.NET中调整数组大小,因此无论您使用什么方法删除重复项,都必须为结果创建一个新数组。

您可以使用HashSet<string>轻松删除重复项:

a = new HashSet<string>(a).ToArray();

哈希集会将数组中的项添加到自身,并自动丢弃重复项。由于哈希集使用哈希码来检查现有项目,这比排序项目要快一些,但结果当然没有排序。

答案 2 :(得分:6)

答案 3 :(得分:6)

如果使用.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();
        }
    }
}