一个简单的数组去重并排序方法
2011-07-17 23:41
267 查看
前沿
公司开发使用的是.Net Framework2.0的,所以不能用Linq,所以自己写了个排序并去重的方法!其实实现数组排序并去重的功能并不是很难,一般只要会编程的都会实现,但是大部分人可能会写多个循环(1,排序;2,去重),而我直接在排序的时候就去检查元素的重复,提高了效率。。。当然如果还有更更好的实现思路,请拍砖指出。。。。代码部分
View Codeusing System; using System.Collections.Generic; using System.Text; using System.Collections; namespace ConsoleApplication1 { ///<summary> /// Author:DreamSea /// Time:2011-7-17 23:35:53 ///</summary> class Program { staticvoid Main(string[] args) { string[] array =newstring[] { "Z", "O", "A", "F", "C", "B", "E", "U", "D", "C", "B", "C", "D", "A", "A" }; Console.WriteLine("原始数据:"+String.Join(",",array)); Console.WriteLine("排序并去重后的结果(降序):"+ String.Join(",", SortAndDdistinct(array, OrderByType.DESC))); Console.WriteLine("排序并去重后的结果(升序):"+ String.Join(",", SortAndDdistinct(array, OrderByType.ASC))); Console.Read(); } ///<summary> /// 去除数组中重复的记录并排序 ///</summary> ///<param name="array">数组</param> ///<param name="orderByType">排序方式</param> ///<returns>处理后的数组</returns> publicstaticstring[] SortAndDdistinct(string[] array, OrderByType orderByType) { List<String> result =new List<string>(); string[] newArray = array; bool isChange =false; //本次循环是否排序过 int j =0; //排序循环叠加变量 if (OrderByType.ASC == orderByType) //升序 { for (int i =0; i < newArray.Length; i++) { isChange =false; for (; j < newArray.Length -1- i; j++) { if (newArray[j].CompareTo(newArray[j +1]) >0) //每次将相对较小大的值放在后面 { string swap = newArray[j]; newArray[j] = newArray[j +1]; newArray[j +1] = swap; //排序过 isChange =true; } } string value = newArray[newArray.Length -1- i]; if (!result.Contains(value)) //如果集合中未包含该元素,则添加 result.Add(value); //判断是否继续排直接序操作 //如果上次操作未排,则下次不再排序,直接去重复 j = isChange ?0 : newArray.Length; } } else//降序 { for (int i =0; i < newArray.Length; i++) { isChange =false; for (; j < newArray.Length -1- i; j++) { if (newArray[j].CompareTo(newArray[j +1]) <0) //每次将相对较的值放在后面 { string swap = newArray[j]; newArray[j] = newArray[j +1]; newArray[j +1] = swap; //排序过 isChange =true; } } string value = newArray[newArray.Length -1- i]; if (!result.Contains(value)) //如果集合中未包含该元素,则添加 result.Add(value); //判断是否继续排直接序操作 //如果上次操作未排,则下次不再排序,直接去重复 j = isChange ?0 : newArray.Length; } } return result.ToArray(); } } ///<summary> /// 排序方式 ///</summary> publicenum OrderByType { ASC, DESC } }
后记
第一次写博客,可能语言组织的不是很完美,请给位大鸟不吝指教.....相关文章推荐
- js一个简单的方法实现数组中元素相加
- 数组成员打乱顺序的一个简单的方法
- IOS几种简单有效的数组排序方法
- 实现两有序数组的合并仍为新有序数组,且不对新数组排序的最简单方法
- 一个比较简单的生成value - key静态字符数组的方法
- 一个简单的去重排序方法
- ios几种简单有效的数组排序方法
- IOS几种简单有效的数组排序方法
- PHP实现统计一个数字在排序数组中出现次数的方法
- IOS几种简单有效的数组排序方法
- 给有n个数的数组a,其中超过一半的数为一个定值,在不排序,不开额外数组情况下,以最高效的方法找出这个数。
- IOS几种简单有效的数组排序方法
- c#数组简单排序方法
- 给一个整数数组,对数组中的每个整数中的所有数字按照升序排列(如101排序后为011)请写一个方法,输出排序后的数组中的最大数。 例如有一个数组: 101、132、375,排序后11、123、357,
- IOS几种简单有效的数组排序方法
- js sort方法根据数组中对象的某一个属性值进行排序
- IOS几种简单有效的数组排序方法
- 11.5 排序后的字符串数组,其中散布着空字符串,编写一个方法,找出给定字符串的位置。
- Array数组(引用)排序两种简单方法
- 请写一个简单的求数组元素最大值和最小值的方法