C#中Array类的使用

Array类

提供创建、操作、搜索和排序数组的方法,因而在公共语言运行时中用作所有数组的基类。

命名控件: System

程序集:mscorlib

语法:public abstract class Array:ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuraEquatable

我们可以看出,Array是一个抽象类。

在博客http://blog.csdn.net/wangshubo1989/article/details/46985269中所诉的用方括号声明的数组,其实是使用Array类的表示法。在后台使用

C#语法,会创建一个派生自抽象基类Array的新类。

这样就可以使用Array类为每个C#数组定义的方法和属性了。

1、使用Array创建数组

前面已经提到, Array是一个抽象类,所以不能使用构造函数来创建数组。但是可以使用静态方法CreateInstance()创建数组。

CreateInstance()的重载版本有很多:

//创建使用从零开始的索引、具有指定Type和长度的一维Array

public static Array CreateInstance(Type elementType, int length)

例如:

Array my1DArray = Array.CreateInstance(typeopf(Int32), 5);

//创建使用从零开始的索引、具有指定Type和维长的多维Array。维的长度在一个32位整数数组中指定。

public static Array CreateInstance(Type elementType, params int[] lengths)

例如:

int [] myLengthsArray = new int[4] {2,3,4,5};

Array my2DArray = Array.CreateInstance(typeopf(string), myLengthsArray);

//创建使用从零开始的索引、具有指定Type和维长的多维Array。维的长度在一个64位整数数组中指定。

public static Array CreateInstance(Type elementType, params long[] lengths)

例如:

int [] myLengthsArray = new int[4] {2,3,4,5};

Array my3DArray = Array.CreateInstance(typeopf(string), myLengthsArray);

//创建使用从零开始的索引、具有指定Type和维长的二维Array。

public static Array CreateInstance(Type elementType, int length1, int length2)

例如:

Array my4DArray = Array.CreateInstance(typeopf(string), 2, 3);//创建一个2*3的数组

//创建使具有指定下限、指定Type和维长的多维Array。

public static Array CreateInstance(Type elementType, int [] lengths, int [] lowerBounds)

其中, lengths表示要创建的Array的每个维度的大小;lowerBounds表示要创建的Array的每个维度的起始索引。

例如:

int [] lengths = {2, 3};

int [] lowerBounds{1, 10};

Array my5DArray = Array.CreateInstance(typeopf(string), lengths , lowerBounds);//创建一个2*3的数组,第一维基于1, 第二维基于10

//创建使用从零开始的索引、具有指定Type和维长的三维Array。

public static Array CreateInstance(Type elementType, int length1, int length2, int length3)

例如:

Array my5DArray = Array.CreateInstance(typeopf(string), 2, 3, 4);

2、设置和获取数组的元素

使用SetValue()函数设置数组的元素,SetValue()有许多重载的版本

使用GetValue()函数来获取数组的元素,GetValue()有许多重载的版本

例如:

// Creates and initializes a one-dimensional array.

String[] myArr1 = new String[5];

// Sets the element at index 3.

myArr1.SetValue( "three", 3 );

Console.WriteLine( "[3]: {0}", myArr1.GetValue( 3 ) );

// Creates and initializes a two-dimensional array.

String[,] myArr2 = new String[5,5];

// Sets the element at index 1,3.

myArr2.SetValue( "one-three", 1, 3 );

Console.WriteLine( "[1,3]: {0}", myArr2.GetValue( 1, 3 ) );

// Creates and initializes a three-dimensional array.

String[,,] myArr3 = new String[5,5,5];

// Sets the element at index 1,2,3.

myArr3.SetValue( "one-two-three", 1, 2, 3 );

Console.WriteLine( "[1,2,3]: {0}", myArr3.GetValue( 1, 2, 3 ) );

// Creates and initializes a seven-dimensional array.

String[,,,,,,] myArr7 = new String[5,5,5,5,5,5,5];

// Sets the element at index 1,2,3,0,1,2,3.

int[] myIndices = new int[7] { 1, 2, 3, 0, 1, 2, 3 };

myArr7.SetValue( "one-two-three-zero-one-two-three", myIndices );

Console.WriteLine( "[1,2,3,0,1,2,3]: {0}", myArr7.GetValue( myIndices ) );

}

}

/*

上诉代码的输出:

[3]: three

[1,3]: one-three

[1,2,3]: one-two-three

[1,2,3,0,1,2,3]: one-two-three-zero-one-two-three

*/

3、复制数组

复制数组会使数组实现ICloneable接口,这个接口定义的Clone()方法会创建数组的浅表副本。

但是如果数组的元素包含引用类型,则不复制元素,只复制引用。

除了Clone()之外,还有Array.Copy方法创建浅表副本,二者的区别详见博客

http://blog.csdn.net/wangshubo1989/article/details/47002667

4、排序

Array类使用QuickSort(快速排序)算法对数组中元素进行排序。Sort()方法需要数组中的元素实现IComparable接口。

(string、int都实现了IComparable接口)

同样,Sort方法有许多重载函数,下面简单介绍几个。

//使用Array中每个元素的IComparable实现,对整个一维Array中的元素进行排序。

public static void Sort(Array array)

例如:

string [] names = {"wang", "li", "liu", "zhao"};

Array.Sort(names);

如果对数组使用自定义类,就必须实现IComparable接口

例如:

Person类

public class Person : IComparable {

public Person() { }

public Person(string name, string sex) {

this.Name = name;

this.Sex = sex;

}

public string Name;

public string Sex;

public override string ToString() {

return this.Name + " " + this.Sex;

}

#region IComparable 成员

public int CompareTo(object obj) {

Person p = obj as Person;

if (p == null) {

throw new NotImplementedException();

}

return this.Name.CompareTo(p.Name);

}

#endregion

} 这里就可以对Person对象数组排序了:

Person[] persons = {

new Person("Lili", "Female"),

new Person("Heicer", "Male"),

new Person("Lucy", "Female") };

Array.Sort(persons);

foreach (Person p in persons){

Console.WriteLine(p);

}

有关更详细的Sort()的使用方法会在后面的Blog中更新。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-29 01:34:25

C#中Array类的使用的相关文章

Array类

Array类是数组的操作类,定义在java.util包中,主要功能是实现数组元素的查找.数组内容的填充.排序等. //================================================= // File Name : Array_demo //------------------------------------------------------------------------------ // Author : Common import java.uti

Javascript 中 Array的 sort()和 compare()方法

Javascript 中 Array的 sort()方法其实是把要排序的内容转化为string(调用 toString()), 然后按照字符串的第一位 ascii 码先后顺序进行比较,不是数字. 我们看看官方是怎么说的: arrayobj.sort(sortfunction) 参数 arrayObj 必选项.任意 Array 对象. sortFunction 可选项.是用来确定元素顺序的函数的名称.如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列. 说明 sort 方法将 A

Foundation框架中一些类的使用

提示:  这篇博文主要介绍了Foundation框架中一些类的使用方法,都是以代码方式展示的,可能会比较乱,但都是些常用的方法,这些方法常用自然就会记住所以不用纠结,注意主要记方法的第一个单词,单词不认识的话可以记前三个字母,再配合提示查找 ------------------------------------------------------------------------------------------------------------------ NSURL简介 什么是URL

java中String类小结

构建一个字符串 1.用字符串直接量: String message = new String("Welcome to java"); 2.用字符串直接量: String message = "Welcome to java"; 3.用字符数组 Char[] charArray = {'m', 'y'}; String message = new String(charArray); 不可变字符与限定字符串 String对象是不可变的,内容不能改变 java虚拟机为了

Java集合---Array类源码解析

Java集合---Array类源码解析              ---转自:牛奶.不加糖 一.Arrays.sort()数组排序 Java Arrays中提供了对所有类型的排序.其中主要分为Primitive(8种基本类型)和Object两大类. 基本类型:采用调优的快速排序: 对象类型:采用改进的归并排序. 1.对于基本类型源码分析如下(以int[]为例): Java对Primitive(int,float等原型数据)数组采用快速排序,对Object对象数组采用归并排序.对这一区别,sun在

ES6中的类

前面的话 大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScript 6中引入了类的特性.本文将详细介绍ES6中的类 ES5近似结构 在ES5中没有类的概念,最相近的思路是创建一个自定义类型:首先创建一个构造函数,然后定义另一个方法并赋值给构造函数的原型 function PersonType(name) { this.name = name; } Person

Scala语言规范----Array类

Array类通用数组类定义如下.final class Array[A](len: Int) extends Seq[A] {def length: Int = lendef apply(i: Int): A = ...def update(i: Int, x: A): Unit = ...def elements: Iterator[A] = ...def subArray(from: Int, end: Int): Array[A] = ...def filter(p: A => Boole

javascript Array类

Array类 toString()方法和valueOf()方法,返回特殊的字符串.该字符串是通过对每项调用toString()方法,然后用逗号把它们连接在一起构成的.例如,对具有项"red"."green"和"blue"的数组调用toString()方法或valueOf()方法,返回的是字符串"red,green,blue". join()方法唯一的用途就是连接字符串值.join()方法只有一个参数,即数组项之间使用的字符串.

C# Array类 【温故而知新】

简单的数组知识代码及注释讲解 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace Array类 { class Program { static void Main(string[] args) { //Array是一个抽象类,不能使用构造函数来创建数组 //创建数组 Array arr = Array.CreateInst