在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. 开关灯问题(C++)

    [问题描述] 假设有 N 盏灯(N 为不大于 5000 的正整数),从 1 到 N 按顺序依次编号,初始时全部处于开启状态:有 M 个人(M 为不大于 N 的正整数)也从 1 到 M 依次编号.第一个 ...

  2. Caching Data in the Architecture (C#)

    http://www.asp.net/web-forms/tutorials/data-access/caching-data/caching-data-in-the-architecture-cs ...

  3. 一些容易记混的c++相关知识点

    一些容易记混的c++相关知识. 截图自:<王道程序员面试宝典>

  4. windows远程连接失败问题排查思路

    一般情况下,对WIN7的远程连接只需要5步即可完成远程连接的设置: 1).用户是否设置了密码 2).计算机属性-允许远程登录 3).设置计算机永不睡眠 4).关闭防火墙或者设置入站规则 5).排查Re ...

  5. apache访问403错误

    1.排查selinux 2.目录权限 3.WEB主目录是否正确

  6. dataTables工作总结

    近期在工作中用到了dataTables,现在总结一下在工作中遇到的问题以及解决方法,如有不妥之处希望多多指教,定会改进. 首先这里用的是coloradmin框架,在vs环境下开发. 这里写一个容器用于 ...

  7. android平台蓝牙编程(转)

    http://blog.csdn.net/pwei007/article/details/6015907 Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输. 本文档描述了怎样利用a ...

  8. return语句的用法

    1.return语句的作用:a.返回一个值,这个值可以是任意类型.b.使程序返回到操作系统(即终止程序)2.java中对于一个函数,不论有没有返回值类型,都可以带有return 语句.但是区别在于,r ...

  9. JavaBean中DAO设计模式简介

    一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/Ser ...

  10. OSG数学基础:坐标系变换

    三维实体对象需要经过一系列的坐标变换才能正确.真实地显示在屏幕上.在一个场景中,当读者对场景中的物体进行各种变换及相关操作时,坐标系变换是非常频繁的. 坐标系变换通常包括:世界坐标系-物体坐标系变换. ...