从C#中的数组中删除相同的元素

本文关键字:元素 数组 删除 | 更新日期: 2023-09-27 17:58:13

如何从C#中的Array中删除相同的元素?

例如array{0,2,2,8,4,6,1,0,4}并且输出将是array{0,2,8,4,6,1}

从C#中的数组中删除相同的元素

您可以使用LINQ并执行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();

下面是一个应该在.NET2和C#2中正确工作的方法。

(由于HashSet<T>类在.NET2中不可用,因此它使用Dictionary<K,V>来进行有效的O(1)键查找,忽略该值。)

int[] 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>。就像在添加元素时直接检测到的一样,如果元素已经存在于内部。但这取决于你的需求。。。