我想知道一种从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
答案 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();
}
}
}