zoukankan      html  css  js  c++  java
  • 一个简单的数组去重并排序方法

    前沿

         公司开发使用的是.Net Framework2.0的,所以不能用Linq,所以自己写了个排序并去重的方法!其实实现数组排序并去重的功能并不是很难,一般只要会编程的都会实现,但是大部分人可能会写多个循环(1,排序;2,去重),而我直接在排序的时候就去检查元素的重复,提高了效率。。。当然如果还有更更好的实现思路,请拍砖指出。。。。

    代码部分

    View Code
    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
    }
    }

    后记

          第一次写博客,可能语言组织的不是很完美,请给位大鸟不吝指教.....


    @_____ Everything is possible,Believe I Can,I'm Sea!J
  • 相关阅读:
    IOS开发之----设置UITableView背景色和选中背景色
    IOS开发之 ---- iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)
    iOS如何将你的程序打包成ipa
    苹果企业开发者账号申请记录
    UIButton上图片和文字的位置调整
    试图添加进 ScrollerVier 的视图里,默认下移64个像素
    NetworkManger解析 xcode7.0以上要改字段
    iOS 登录功能的实现
    keyboard和 UITextFiled 之间的处理
    curator zookeeper监控。SpiderWatcher
  • 原文地址:https://www.cnblogs.com/DreamSea/p/2108993.html
Copyright © 2011-2022 走看看