自己实现的一个数组排序并去重的功能
【前沿】公司开发使用的是.Net Framework2.0的,所以不能用Linq,所以自己写了个排序并去重的方法!其实实现数组排序并去重的功能并不是很难,一般只要会编程的都会实现,但是大部分人可能会写多个循环(1.排序;2.去重),而我直接在排序的时候就去检查元素的重复,提高了效率。。。当然如果还有更更好的实现思路,请拍砖指出。。。。
代码部分
using 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 { static void Main(string[] args) { string[] array = new string[] { "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> public static string[] 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> public enum OrderByType { ASC, DESC } }
效果预览
后记
第一次写博客,可能语言组织的不是很完美,请给位大鸟不吝指教.....
posted on 2011-07-17 23:44 DreamSea530 阅读(1696) 评论(1) 编辑 收藏 举报