在C#中对数组的定义比较灵活。这里着重说一下自定义数组和Array类的排序。

在Array类中通过属性Length就可以获取整个数组中数据的数量,可以通过foreach迭代数组。

使用Rank属性可以获取数组的维数,通过属性LongLength也可获取数组中数据的数量,但是基本上不用。

它是当数组中放置的数据量超出了整数的范围时才用。

Array类中排序的方法比较简单,对于string 和 Int 类型直接用Array.Sort()就可以。

但是对于自定义的数组就需要在类中写出Array.Sort()中使用的排序方法。

如下:

 namespace ArrayStudy
{
//类需要实现IComparable<>接口
public class Person:IComparable<Person>
{
public string FirstName { get; set; }
public string LastName { get; set; }
public override string ToString()
{
return string.Format("{0} {1}",FirstName,LastName);
}
//CompareTo是IComparable接口里面的函数
//如果相比较的两个相等,结果是0
//Array.sort()会根据返回的值进行排序
public int CompareTo(Person other)
{
if(other==null)
{
throw new ArgumentNullException("other");
}
int result = this.FirstName.CompareTo(other.FirstName);
if(result==)
{
result = this.LastName.CompareTo(other.LastName);
}
return result;
}
}
}

上面的类中,是对FirstName 排序的,如果FirstName相同,就比较LastName.

主函数调用方式如下:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ArrayStudy
{
class Program
{
static void Main(string[] args)
{
Person[] person ={
new Person{FirstName="Chen",LastName="Long"},
new Person{FirstName="Wang",LastName="Xinyu"},
new Person{FirstName="Jia",LastName="Yankun"},
new Person{FirstName="Jiao",LastName="Yuanyuan"},
new Person{FirstName="Zhang",LastName="Huangjian"}
}; Array.Sort(person);
foreach(Person p in person)
{
Console.WriteLine(p.ToString());
}
Console.WriteLine("Rank:{0}",person.Rank);
Console.WriteLine("LongLength:{0}",person.LongLength);
Console.WriteLine("Length:{0}",person.Length);
Console.ReadKey();
return;
}
}
}

而对于不能确定要对哪一个变量进行排序的时候就需要增加一个新的比较类。这个类是实现了IComparer<>接口.

在这个接口里面含有int Compare(T x,T y)比较函数,里面含有两个变量。

 namespace ArrayStudy
{
//首先定义枚举的类型,在下面的switch中进行判断
public enum PersonCompareType
{
FirstName,
LastName
}
public class PersonComparer:IComparer<Person>
{
private PersonCompareType comparetype;
public PersonComparer(PersonCompareType comparetype)
{
this.comparetype = comparetype;
}
public int Compare(Person x,Person y)
{
if (x == null) throw new ArgumentNullException("x");
if (y == null) throw new ArgumentNullException("y");
int result = x.FirstName.CompareTo(y.FirstName);
int result2= x.LastName.CompareTo(y.LastName);
switch(comparetype)
{
//如果对目标类型排序发现相同,就对另外一个排序并返回值
case PersonCompareType.FirstName:
{
if (result == )
return result2;
return result;
}
case PersonCompareType.LastName:
{
if (result2 == )
return result;
return result2;
}
default :
throw new ArgumentException(
"unexpected compare type"
);
}
}
}
}

将主函数中的排序改成如下:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ArrayStudy
{
class Program
{
static void Main(string[] args)
{
Person[] person ={
new Person{FirstName="Chen",LastName="Long"},
new Person{FirstName="Wang",LastName="Xinyu"},
new Person{FirstName="Jia",LastName="Yankun"},
new Person{FirstName="Jiao",LastName="Yuanyuan"},
new Person{FirstName="Zhang",LastName="Huangjian"}
}; //在Sort()后面添加第二个参数,这个参数是比较的方法类型
Array.Sort(person,new PersonComparer(PersonCompareType.FirstName));
foreach(Person p in person)
{
Console.WriteLine(p.ToString());
}
Console.WriteLine("Rank:{0}",person.Rank);
Console.WriteLine("LongLength:{0}",person.LongLength);
Console.WriteLine("Length:{0}",person.Length);
Console.ReadKey();
return;
}
}
}

这样便可以灵活选择排序的对象了。

C#学习之自定义数组及其排序的更多相关文章

  1. Hadoop学习之自定义二次排序

    一.概述    MapReduce框架对处理结果的输出会根据key值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的.在我们实际的需求当中,往 往有要对reduce输出结果进行二次排 ...

  2. js 数组随机排序

    仅用于个人学习记录 javascript 数组随机排序1.最简洁的方法:function randomsort(a, b) {    return Math.random()>.5 ? -1 : ...

  3. Objective-C之NSArray(数组)默认排序与自定义排序

    在讲OC中数组的排序之前我先上一段代码,它是简单数组排序的一种方法(也就是元素是字符串或者数据的数组,因为后面要讲元素为类的数组排序) 代码1: NSArray *sortArr4 = [sortAr ...

  4. 日常学习随笔-自定义了一个MyArrayListDefin集合(数组扩容+迭代器+JDK1.8新方法+详细说明)

    一.自定义了一个ArrayList的模拟集合(源码+详细说明) 前段时间分析了下ArrayList集合的源码,总觉得如果不自己定义一个的话,好像缺了点什么,所以有了如下的代码. 代码可以说是逐行注释了 ...

  5. java面试题:已知一个数组[2,4,6,2,1,5],将该数组进行排序(降序,不能用工具类进行排序),创建两条线程交替输出排序后的数组,线程名自定义

    package com.swift; import java.util.Arrays; import java.util.Comparator; public class ArrayThread_Te ...

  6. java学习之—合并两个数组并排序

    /** * 合并两个数组并排序 * Create by Administrator * 2018/6/26 0026 * 下午 4:29 **/ public class MergeApp { pub ...

  7. [JS深入学习]——数组对象排序

    (转) JavaScript实现多维数组.对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序. sort() 方法用于对数组的元素进行排序.语法如下: arrayObject. ...

  8. PHP数组的排序函数

    对保存在数组中的相关数据进行排序是一件非常有意义的事情.在PHP中提供了很多函数可以对数组进行排序,这些函数提供了多种排序的方法.例如,可以通过元素的值或键及自定义排序等. ①简单的数组排序函数简单的 ...

  9. 重写Oracle的wm_concat函数,自定义分隔符、排序

    oracle中,wm_concat函数是一个聚合函数,和mysql中的group_concat函数类似,不过group_concat函数比较强大,可以定义分隔符和排序,当然所谓强大是相对的,这里假使我 ...

随机推荐

  1. Linux 150命令之 文件和目录操作命令 ls

    文件和目录操作命令 ls 查看文件和目录查看显示详信息 ls 工具的参数 ls -l 查看文件详细信息 ls -h 查看文件的大小 ls -ld 只查看目录信息 ls –F 给不同文件加上不同标记 l ...

  2. js经典试题之原型与继承

    js经典试题之原型与继承 1:以下代码中hasOwnProperty的作用是? var obj={} …….. obj.hasOwnProperty("val") 答案:判断obj ...

  3. vue移动音乐app开发学习(三):轮播图组件的开发

    本系列文章是为了记录学习中的知识点,便于后期自己观看.如果有需要的同学请登录慕课网,找到Vue 2.0 高级实战-开发移动端音乐WebApp进行观看,传送门. 完成后的页面状态以及项目结构如下: 一: ...

  4. 软件功能说明书——Thunder团队

    爱阅APP功能说明书 一.引言 相信大家都使用过电子书阅读器,相对于纸质版书籍电子书APP做到了环保.易存储.便携.因此我们Thunder团队开发了——爱阅APP,以下内容是Alpha版的功能说明书. ...

  5. 20145214 《Java程序设计》第1周学习总结

    20145214 <Java程序设计>第1周学习总结 教材学习内容总结 第一章 了解了Java的诞生和版本演进的历史,目前的最新版本是Java SE8. java的三大平台分别是Java ...

  6. QWidget一生,从创建到销毁事件流

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QWidget一生,从创建到销毁事件流     本文地址:http://techieliang ...

  7. sublime Remote_encoding cp1252

    "remote_encoding": "cp1252",才能连接远程ftp

  8. dedecms 后台登录地址

    dedecms  后台登录地址 http://www.域名.com/member/index.php

  9. Java设计

    重构前 CustomDataChar | getConnection()findCustomers()createChar()displayChar() 重构后 CustomDataChar | da ...

  10. Delphi处理事件函数中的Sender: TObject代表什么?

    下面这个按钮点击事件中,Sender代表谁? procedure Tsomain.ToolButton1Click(Sender: TObject); 是代表事件的拥有者吗? procedure TF ...