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

时间:2011-06-01 12:04:39

标签: c#

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

e.g。 array{0,2,2,8,4,6,1,0,4} 输出将为array{0,2,8,4,6,1}

4 个答案:

答案 0 :(得分:6)

您可以使用LINQ并执行myArray.Distinct().ToArray()

答案 1 :(得分:3)

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();

答案 2 :(得分:1)

这是一种应该在.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;
                                    });
}

答案 3 :(得分:0)

如果您不想允许具有相同值的多个条目,则应使用HashSet<T>。就像你添加元素时直接检测到的那样,如果它已经存在于内部。但这取决于你的需求......