2017-07-02 51 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

相关问题