visual studio 2005 - c#中从字符串数组中删除重复字符串的有效方法

本文关键字:字符串 有效 方法 删除 数组 studio visual 2005 | 更新日期: 2023-09-27 17:49:34

我想知道一个在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

visual studio 2005 - c#中从字符串数组中删除重复字符串的有效方法

可以使用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() Method

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