2017-07-02 83 views
0

正如標題所說,我正在C#上免費的在線課程,並且我一直被困在這個問題上。它要求使用從最小到最大排序的數組編寫函數,並刪除重複條目。該課程已經完成了數組和排序,但是至今沒有如何去除重複數據。如果你可以幫助我,我會很感激。期待從最小到最大的排序數組刪除重複項

+2

LINQ:'enumerable.OrderBy(X => X).Distinct()' –

+0

如課程已 「走了過來排序」(即你正在學習的排序算法),是基於LINQ的解決方案是否合適?您允許使用哪些數據結構? – spender

+0

'public object [] DistinctSortedArray(object [] array) { return array.OrderBy(x => x).Distinct()。ToArray(); }' –

回答

0

有一對夫婦的方式來完成手頭的任務,但是,最快捷的方式可能是使用LINQ:

int[] array = { 3, 5, 1, -9, 4, 8, 23, -657, 54 }; 
array = array.Distinct().OrderBy(x => x).ToArray(); 
0

雖然可能有一些更有效的方法,以幫助您瞭解的概念多一點,這是一個簡單的技術。

您需要跟蹤您已經看到的條目。創建一個新列表,並將數組中的第一個數字添加到它。然後,獲取數組中的第二個數字,並將其與列表中的每個數字進行比較。如果它出現在這個列表中,它是重複的,所以你可以跳過這個數字並移動到數組中的下一個元素。

ArrayList list = new ArrayList(); 
for (int i = 0; i < yourUnsortedArray.length; ++i) { 
    bool hasDuplicate = false; 
    for (int entry in list) { 
     if (yourUnsortedArray[i] == entry) { 
      hasDuplicate = true; 
      break; 
     } 
    } 
    if (hasDuplicate == false) { 
     list.Add(yourUnsortedArray[i]); 
    } 
} 
//list will have no duplicates here. 

獎金優化:這將有助於如果你排序陣列第一。這樣,您只需要查看列表中最近添加的數字,而不是每次都在整個列表中走動。

ArrayList list = new ArrayList(); 
for (int i = 0; i < yourSortedArray.length; ++i) { 
    if (list.length == 0 || list[list.length - 1] != yourSortedArray[i]) { 
     list.Add(yourSortedArray[i]); 
    } 
} 
+0

這個答案很好解釋給新手的概念。使用ArrayList對於新手來說有點太過分了。使用簡單的'int [] unsortedArray'可能是一個更好的選擇。 – user3454439

相關問題