让我有一个方法来删除整数数组中的重复项
public int[] RemoveDuplicates(int[] elems)
{
HashSet<int> uniques = new HashSet<int>();
foreach (int item in elems)
uniques.Add(item);
elems = new int[uniques.Count];
int cnt = 0;
foreach (var item in uniques)
elems[cnt++] = item;
return elems;
}
Run Code Online (Sandbox Code Playgroud)
我如何使这个泛型,现在它接受一个字符串数组并删除它中的重复项?双阵列怎么样?我知道我可能在原始和价值类型之间混合了一些东西.供您参考,以下代码将无法编译
public List<T> RemoveDuplicates(List<T> elems)
{
HashSet<T> uniques = new HashSet<T>();
foreach (var item in elems)
uniques.Add(item);
elems = new List<T>();
int cnt = 0;
foreach (var item in uniques)
elems[cnt++] = item;
return elems;
}
Run Code Online (Sandbox Code Playgroud)
原因是所有泛型类型都应在运行时关闭.谢谢你的评论
public List<T> RemoveDuplicates<T>(List<T> elems)
{ // ^
HashSet<T> uniques = new HashSet<T>();
foreach (var item in elems)
uniques.Add(item);
elems = new List<T>();
int cnt = 0;
foreach (var item in uniques)
elems[cnt++] = item;
return elems;
}
Run Code Online (Sandbox Code Playgroud)
然后你称之为:
.RemoveDuplicates<string>(new List<string>{ "hello", "hello", "world" });
Run Code Online (Sandbox Code Playgroud)
但是,我建议你使用这段代码:
public IList<T> RemoveDuplicates<T>(IEnumerable<T> elems)
{ // ^
IList<T> uniques = new List<T>();
foreach(T item in elems)
if(!uniques.Contains(item))
uniques.Add(item);
return uniques;
}
Run Code Online (Sandbox Code Playgroud)
这条路
或者,如果您可以访问.NET 3.0/3.5/4.0,请像建议的其他答案一样使用linq.希望这有助于说明通用方法.