一个简单的数组去重并排序方法
前沿
公司开发使用的是.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
{
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
}
}
后记
第一次写博客,可能语言组织的不是很完美,请给位大鸟不吝指教.....
posted on 2011-07-17 23:41 DreamSea530 阅读(1129) 评论(0) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步