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