C#数组排序的两种常用方法

本文实例讲述了C#数组排序的两种常用方法。分享给大家供大家参考。具体如下:

1.第一个例子

定义代码

#region Array数组排序1
public class Pigeon : IComparable<Pigeon>
//类元素本身继承比较接口
{
int XValue;
int YValue;
public string BatchNo { get; set; }
public int CompareTo(Pigeon other)
{
  if (other == null)
 throw new ArgumentNullException("比较参数为空");
  //按第三个字符比较
  XValue = Convert.ToInt32(this.BatchNo.Substring(2, 1));
  YValue = Convert.ToInt32(other.BatchNo.Substring(2, 1));
  if (XValue == YValue)
  {
 return 0;
  }
  else if (XValue < YValue)
  {
 return -1;   //返回-1,X排在Y的前面
  }
  else
  {
 return 1;    //返回1,X排在Y的后面
  }
}
}
#endregion

测试代码

#region 测试Array数组排序1
private void button3_Click(object sender, EventArgs e)
{
  Pigeon[] pigeons = new Pigeon[]{
 new Pigeon(){BatchNo="1256"},
 new Pigeon(){BatchNo="1236"},
 new Pigeon(){BatchNo="1276"},
 new Pigeon(){BatchNo="1216"}
  };
  Array.Sort(pigeons);
  string ResultMsg = "";
  foreach (Pigeon o in pigeons)
  {
 ResultMsg += o.BatchNo + "\r\n";
  }
  MessageBox.Show(ResultMsg);
}
#endregion

1.第二个例子

定义代码

#region Array数组排序
public class MyBatch   //数组元素类
{
public string BatchNo { get; set; }
}
public enum CompareType   //比较类型枚举
{
ThreeChar =0,
FourChar=1
}
public class MyBatchCompare:IComparer<MyBatch>
//定义了一个比较类
{
private CompareType compareType;//定义排序类型
public MyBatchCompare(CompareType compareType)
{
  //构造函数中初始化比较类型
  this.compareType = compareType;
}
public int Compare(MyBatch x, MyBatch y)
{
  int XValue;
  int YValue;
  if (x == null) throw new ArgumentNullException("x值为空");
  if (y == null) throw new ArgumentNullException("y值为空");
  switch (compareType)
  {
 case CompareType.ThreeChar:
   //按第三个字符比较从小到大排序
   XValue = Convert.ToInt32(x.BatchNo.Substring(2,1));
   YValue = Convert.ToInt32(y.BatchNo.Substring(2,1));
   if (XValue == YValue)
   {
 return 0;
   }
   else if (XValue < YValue)
   {
 return -1;   //返回-1,X排在Y的前面
   }
   else
   {
 return 1;    //返回1,X排在Y的后面
   }
 case CompareType.FourChar:
   //按第四个字符比较从小到大排序
   XValue = Convert.ToInt32(x.BatchNo.Substring(3,1));
   YValue = Convert.ToInt32(y.BatchNo.Substring(3,1));
   if (XValue == YValue)
   {
 return 0;
   }
   else if (XValue < YValue)
   {
 return -1;   //返回-1,X排在Y的前面
   }
   else
   {
 return 1;    //返回1,X排在Y的后面
   }
 default:
   throw new ArgumentException("比较类型参数错误");
  }
}
}
#endregion

测试代码

#region Array数组排序
private void button2_Click(object sender, EventArgs e)
{
  MyBatch[] batchs ={
   new MyBatch(){BatchNo="1234"},
   new MyBatch(){BatchNo="1263"},
   new MyBatch(){BatchNo="1218"},
   new MyBatch(){BatchNo="1242"}
    };
  //按第三个字符从小到大排
  Array.Sort(batchs,new MyBatchCompare(CompareType.ThreeChar));
  string ResultMsg = "";
  foreach (MyBatch o in batchs)
  {
 ResultMsg += o.BatchNo + "\r\n";
  }
  MessageBox.Show(ResultMsg);
  //按第四个字符从小到大排序
  Array.Sort(batchs, new MyBatchCompare(CompareType.FourChar));
  ResultMsg = "";
  foreach (MyBatch o in batchs)
  {
 ResultMsg += o.BatchNo + "\r\n";
  }
  MessageBox.Show(ResultMsg);
}
#endregion

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • C# 排序算法之堆排序

    一.基本概念 堆:这里是指一种数据结构,而不是我们在C#中提到的用于存储引用类型对象的地方.它可以被当成一棵完全二叉树.  为了将堆用数组来存放,这里对每个节点标上顺序.事实上,我们可以用简单的计算公式得出父节点,左孩子,右孩子的索引: parent(i) = left(i) = 2i right(i)=2i + 1 最大堆和最小堆: 最大堆是指所有父节点的值都大于其孩子节点的堆,即满足以下公式: A[parent[i]]A[i](A是指存放该堆的数组) 最小堆相反. 最大堆和最小堆是堆排序的关

  • C#基础教程之IComparable用法,实现List<T>.sort()排序

    List<T>.sort()可以实现对T的排序,比如List<int>.sort()执行后集合会按照int从小到大排序.如果T是一个自定义的Object,可是我们想按照自己的方式来排序,那该怎么办呢,其实可以用过IComparable接口重写CompareTo方法来实现.流程如下: 一.第一步我们申明一个类Person但是要继承IComparable接口: 复制代码 代码如下: using System; using System.Collections.Generic; usin

  • C#对DataTable里数据排序的方法

    直接给个实例代码吧 复制代码 代码如下: protected void Page_Load(object sender, EventArgs e)    {        DataTable dt = new DataTable();        dt.Columns.Add("Name");        dt.Columns.Add("Age");//因为是字符串,所以排序不对        dt.Rows.Add("小明", "

  • C#排序算法之快速排序

    快速排序实现: 复制代码 代码如下: namespace QuickSort { class QuickSort { public static void Sort(int[] array) { DoSort(array,0, array.Length-1); } private static void DoSort( int[] array, int start, int end) { if( start < end) { int temp = Partition(array, start,

  • C#中使用快速排序按文件创建时间将文件排序的源码

    快速排序类 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using Sy

  • C# 数组查找与排序实现代码

    1. 查找对象 复制代码 代码如下: Person p1 = new Person( " http://www.my400800.cn " , 18 ); Person p2 = new Person( " http://www.my400800.cn " , 19 ); Person p3 = new Person( " http://www.my400800.cn " , 20 ); Person[] persons = ... { p1,

  • C#七大经典排序算法系列(上)

    今天是开篇,得要吹一下算法,算法就好比程序开发中的利剑,所到之处,刀起头落. 针对现实中的排序问题,算法有七把利剑可以助你马道成功. 首先排序分为四种: 交换排序: 包括冒泡排序,快速排序. 选择排序: 包括直接选择排序,堆排序. 插入排序: 包括直接插入排序,希尔排序. 合并排序: 合并排序. 那么今天我们讲的就是交换排序,我们都知道,C#类库提供的排序是快排,为了让今天玩的有意思点, 我们设计算法来跟类库提供的快排较量较量.争取KO对手. 冒泡排序: 首先我们自己来设计一下"冒泡排序&quo

  • c#对list排序示例

    复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ListSort { class Program { static void Main(string[] args) { List listCustomer = new List(); listCustomer.Add(new Customer { name = "客户1",

  • C#基础之数组排序、对象大小比较实现代码

    从个小例子开始: 复制代码 代码如下: int[] intArray = new int[]{2,3,6,1,4,5}; Array.Sort(intArray); Array.ForEach<int>(intArray,(i)=>Console.WriteLine(i)); 这个例子定义了一个int数组,然后使用Array.Sort(arr)静态方法对此数组进行排序,最后输出排序后的数组.以上例子将毫无意外的依次输出1,2,3,4,5,6. 为什么Array的Sort方法可以正确的对i

  • C#数组排序的两种常用方法

    本文实例讲述了C#数组排序的两种常用方法.分享给大家供大家参考.具体如下: 1.第一个例子 定义代码 #region Array数组排序1 public class Pigeon : IComparable<Pigeon> //类元素本身继承比较接口 { int XValue; int YValue; public string BatchNo { get; set; } public int CompareTo(Pigeon other) { if (other == null) throw

  • jQuery验证元素是否为空的两种常用方法

    本文实例讲述了jQuery验证元素是否为空的两种常用方法.分享给大家供大家参考.具体如下: 下面提供了两种方法用于检查指定id的元素的内容是否为空 // 方法一 if (!$('#jb51').html()) { //http://www.jb51.net 什么都没有找到; } // 方法二 if ($('#jb51').is(":empty")) { //http://www.jb51.net 什么都没有找到; } 希望本文所述对大家的jQuery程序设计有所帮助.

  • Python timer定时器两种常用方法解析

    这篇文章主要介绍了Python timer定时器两种常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法一,使用线程中现成的: 这种一般比较常用,特别是在线程中的使用方法,下面是一个例子能够很清楚的说明它的具体使用方法: #! /usr/bin/python3 #! -*- conding: utf-8 -*- import threading import time def fun_timer(): print(time.strf

  • SpringBoot中定位切点的两种常用方法

    有时候,我们使用AOP来进行放的增强,编写切面类的时候,需要定位在哪个方法上试用该切面进行增强,本片文章主要讲解两种在SpringBoot中定位切点的方法,一种是使用execution表达式的方法,一种则是利用自定义注解的方法. 接下来以一个简单的例子来讲解这两种方法的使用方式. <==========方法执行前==========> method(); <==========方法执行后==========> execution 表达式 execution表达式的方式主要是在定义切

  • JavaScript复制内容到剪贴板的两种常用方法

    常见方法 查了一下万能的Google,现在常见的方法主要是以下两种: 第三方库:clipboard.js 原生方法:document.execCommand() 分别来看看这两种方法是如何使用的. clipboard.js 这是clipboard的官网:https://clipboardjs.com/,看起来就是这么的简单. 引用 直接引用: <script src="dist/clipboard.min.js"></script> 包: npm install

  • Java比较对象大小两种常用方法

    引入原因: Java中的对象,正常情况下,只能进行比较:== 或!= ,不能使用 < 或 > ,但是在开发时需要用到比较对象的大小 1.Comparable接口的使用(自然排序) 1.像String .包装类等实现了Comparable接口,重写了compareTo()方法,给出了比较两个对象大小的方法 2.像String .包装类等重写了compareTo()方法后,默认执行了从小到大的排序 3.重写compareTo()的规则: 如果当前对象this大于形参对象obj,则返回正整数,如果当

  • Js 弹出框口并返回值的两种常用方法

    1.window.showModalDialog(url,args,dialogattrs) 参数说明: url:弹出页面地址 agrs:主窗口传给对话框的参数,可以是任意类型(数组也可以) dialogattrs:弹出窗口的样式参数 模式对话框用法: 主窗口:var value =window.showModalDialog('test.jsp',strs,'resizable:yes'); 弹出框中通过window.returnValue来设置返回值,上面的value拿到的就是这个值,然后主

  • js中函数调用的两种常用方法使用介绍

    一个js函数 function test(aa){ window.alert("你输入的是"+aa); } 方法一:直接调用 test("dddd"); 方法二:函数赋值给变量 var abc=test; abc('中国');//用变量来调用函数 注意: 当我们写成这种形式的时候,var abc=test("dddd"); 不能通过变量abc来调用函数. 这种写法当test有返回值的时候会把返回值赋值给abc,当没有返回值的时候abc的值为und

  • js读取json的两种常用方法示例介绍

    方法一:js中最著名的eval方法 复制代码 代码如下: var strJson="{name:'张三'}";//json var obj=eval("("+strJson+")");//转换后的json对象 alert(obj.name);//json name 此方法需要注意的是: 对象表达式{'name':'张三'}必须用"()"扩住,否则 复制代码 代码如下: var strJSON = "{name:'张三

  • 使用Java构造和解析Json数据的两种方法(详解二)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Json数据的方法

随机推荐