在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. leetcode个人题解——#15 3sums

    class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { sor ...

  2. 2018java开发一些面经

    算法系列:https://www.cnblogs.com/yanmk/p/9232908.html 2018Java开发面经(持续更新) 不要给自己挖坑!!!不要给自己挖坑!!!不要给自己挖坑!!!如 ...

  3. httpd 2.2.15 添加流媒体模块

    项目中使用的一直都是 httpd  2.2.15  用于播放视频资源,近期有个新产品上线发现快进视频会出现卡顿情况,因此添加了流媒体模块.(怀疑是新产品中的播放器进行了更改) 原文:http://li ...

  4. Python-期末练习

    1.骑车与走路:我们的校园很大很大很大大大大大……,骑个自行车去办事会很快,比如取个快递了,到其他宿舍楼找个同(nv)学(you)了.但实际上,并非去办任何事情都是骑车快,因为骑车总要找车.开锁.停车 ...

  5. Python练习—函数

    1.编写函数f(n),实现输入n的值,求出n的阶乘.然后调用此函数计算1! +2!+3!+……10!的结果,输出到屏幕上. def f(n): count = 1; for i in range(1, ...

  6. PhotoShop基础工具 -- 移动工具

    还是学点美工的东西吧, 业余爱好   比学编程还难 PS版本 : PhotoShop CS6 1. 移动工具 (1) 工具栏和属性栏 工具栏 和 属性栏 : 左侧的是工具栏, 每选中一个工具, 在菜单 ...

  7. Java 类和Static关键字

    类的定义 类的命名.首字母大写 大括号后面没有分号 成员变量 Java会自动初始化成员变量但是不会自动初始化局部变量: 可以在定义成员变量是直接初始化,成员变量的作用范围在整个类体 对象的创建和引用的 ...

  8. 软工1816 · Alpha冲刺(4/10)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 完成菜品信息的标定.量化以及整理成csv的任务   接下来的计划 & ...

  9. ACM 第十三天

    训练赛题目 题目地址:https://odzkskevi.qnssl.com/415c275cb0a15fcb4ede21b8cb5297de?v=1533963116   A题代码: #includ ...

  10. C#之WCF入门1—简单的wcf例子

    第一步:创建一个空的解决方案,新建一个WCF服务应用程序项目(使用默认名字) 来模拟服务端,新建一个控制台应用程序项目(名称改为 ConsoleApp)来模拟客户端. 第二步:简单分析WcfServi ...