如何在C#中从数组中删除相同的元素?
例如:array{0,2,2,8,4,6,1,0,4}
,输出应为array{0,2,8,4,6,1}
myArray.Distinct().ToArray()
。using System.Linq;
...
var output = array.Distinct().ToArray();
没有LINQ:
int[] array = new[] { 0, 2, 2, 8, 4, 6, 1, 0, 4 };
List<int> result = new List<int>();
foreach (int element in array)
{
if (!result.Contains(element))
result.Add(element);
}
int[] resultArray = result.ToArray();
Contains
пјҢAdd
е’ҢToArray
жҳҜLINQжү©еұ•гҖӮ - EdgarList<T>.Contains
方法的时间复杂度为 O(n),这意味着如果用于较大的数组,则性能将非常差。 (对于相对较小的数组,它应该可以接受。) - LukeHint[] input = new int[] { 0, 2, 2, 8, 4, 6, 1, 0, 4 };
int[] output = DistinctItems(input); // 0, 2, 8, 4, 6, 1
// ...
public static T[] DistinctItems<T>(T[] input)
{
Dictionary<T, bool> dict = new Dictionary<T, bool>(input.Length);
return Array.FindAll(input, delegate(T item)
{
if (dict.ContainsKey(item))
return false;
dict.Add(item, true);
return true;
});
}
HashSet<T>
。这样,当您添加元素时,您可以直接检测它是否已经存在。但这取决于您的需求...