2011-06-01 68 views

回答

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

如果我可以在Visual Studio 2.0中做同樣的事情,那麼就沒有像LINQ這樣的概念,那麼我該怎麼辦? – 2011-06-01 12:13:55

+0

'Contains','Add'和'ToArray'是LINQ擴展。 – Edgar 2011-06-01 12:24:05

+0

@埃德加:你確定嗎?我將Framework切換到2.0,從列表中刪除Linq並編譯並運行正常。檢查System.Collections.Generic.List 。它包含'Contains','Add'和'ToArray'方法。 – Episodex 2011-06-01 12:26:43

6

您可以使用LINQ並執行myArray.Distinct().ToArray()

+0

如果我可以在Visual Studio 2.0中做同樣的事情,那麼在那裏沒有像LINQ這樣的概念,所以我能做什麼? – 2011-06-01 12:13:21

+0

你的意思是.NET 2.0,對不對?如果沒有LINQ,你必須編寫自己的方法來篩選數組中的變量,並將它們添加到一個新的數組中,如果那個變量沒有變量的話。該方法將返回新的唯一數組。 – Edgar 2011-06-01 12:17:12

+0

請提供我常用的解決方案,用於任何版本的ASP.NET – 2011-06-01 12:17:25

1

這裏是一個要在.NET2和C#2正常工作的方法。

(由於HashSet<T>類不可用.NET2它採用了Dictionary<K,V>而不是爲effiicient 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; 
            }); 
} 
0

如果你不想讓多個條目同樣的價值,你應該使用HashSet<T>。就像那樣,當你添加一個元素(如果它已經存在的話)的時候直接檢測。但這取決於你的需求...