一. Array-数组
在C#中定义一个数组的方法一般为:
Data Type [] Array=new DataType [Size];
其中Data Type可以是基本数据类型和对象类型数据,Size是数组元素的个数.
例子定义一个int类型的数据来表示一个班上的人数
int [] classNum=new int[20];
数组的属性有:
属性 | 意义 |
public virtual bool IsFixedSize | 数组的长度是否是固定的 |
public virtual bool IsReadOnly | 数组是否是只读型 |
public virtual bool IsSynchronized | 在多线程环境下是否安全 |
public int Length | 数组元素的个数 |
public int Rank | 数组的维数 |
public virtual object SyncRoot | 同步访问数组对象 |
数组对象的方法有静态方法和实例方法;
public static int BinarySearch(Array a, object v);
数组a必须是一维而且排好序的;此方法的结果是返回a中与v匹配的第一个元素的索引号.如果没有匹配元素则返回一个负数-1;
public static int BinarySearch(Array a, object v, IComparer comp);
与前面的方法相似,区别在于comp;用于比较符号;
public static int BinarySearch(Array a, int start,int count, object v)
从a中start开始的count个元素中查询与v匹配的元素的一个索引号.
public static int BinarySearch(Array a, int start,int count, object v,IComparer comp)
与上一个方法相似.区别在于用比较法补偿;
public static void Clear(Array a, int start, int count)
将数组a中从start开始的从count个元素置零;
public virtual object Clone()Copy这个数组;
public static void Copy(Array source,Array dest, int count)
将source中的count个元素赋值到数组dest中.;
public virtual void CopyTo(Array dest, int start)
将调用此方法的数组对象中的start个元素赋值到dest中.
public static Array CreateInstance(Type t, int size)
创建一个有Size个元素的数组,其中元素类型是t;
public static Array CreateInstance(Type t, int size1, int size2)
创建一个二维数组,数组的参数是[size1][size2];数组元素的类型是t;
public static Array CreateInstance(Type t, int size1,int size2, int size3)
创建一个三维数组,元素类型是T,同创建二维数组一样.;
public static Array CreateInstance(Type t, int[ ] sizes)
创建一个参数sizes维的数组,元素类型是t;
public static Array CreateInstance(Type t, int[ ] sizes,int[ ] startIndexes)
创建一个多维数组,数组维数是sizes,每一个元素的数据类型是t.数组中每一维数组的开始索引号是startIndexes;
public override bool Equals(object v)
判断v是否与调用此方法的数组对象是否相同.
public virtual IEnumerator GetEnumerator()
返回数组的枚举对象
public int GetLength(int dim)
返回多维数组第dim维的元素的个数
public override int GetHashCode()
返回数组的哈希码;
public int GetUpperBound(int dim)
返回多维数组第dim维的元素的最后一个索引值
public object GetValue(int index) 返回一维数组第index个元素的值
public object GetValue(int idx1, int idx2)和public object GetValue(int idx1, int idx2,int idx3)分别获取2维和3维数组的某个特殊元素的值.;
public static int IndexOf(Array a, object v) 返回a中与v的值一样的第一元素的索引值;
public static int IndexOf(Array a, object v,int start)
从a中第start个元素开始,返回与v的值一样的元素位置;
public static int IndexOf(Array a, object v,int start, int count)
从a中第start个元素开始的count个元素中,返回与v的值一样的元素位置;
public static int LastIndexOf(Array a, object v,int start, int count)
在a中得第start个元素开始的count个元素中查找与v相等的元素的索引号
public static void Reverse(Array a) 将数组a所有元素做个逆转;
public void SetValue(object v, int index) 设置数组对象的第index个元素的值为v;
对象二维和三维数组有相似的函数;public void SetValue(object v, int idx1, int idx2)和public void SetValue(object v, int idx1,int idx2, int idx3)
public static void Sort(Array a) 对数组a进行排序;
二. 定义和初始化一个数组
int[] myIntArray; myIntArray = new int[4]; 利用数组的函数IndexOf() and LastIndexOf()来获取数组中某一个特定元素的位置;
int[] intArray = {1, 2, 1, 3}; Console.WriteLine("intArray:"); for (int i = 0; i < intArray.Length; i++) { Console.WriteLine("intArray[" + i + "] = " + intArray[i]);} int index = Array.IndexOf(intArray, 1); Console.WriteLine("Array.IndexOf(intArray, 1) = " + index); index = Array.LastIndexOf(intArray, 1); Console.WriteLine("Array.LastIndexOf(intArray, 1) = " + index); |
输出结果是
intArray:
intArray[0]=1
intArray[1]=2
intArray[2]=1
intArray[3]=3
Array.IndexOf(intArray,1) =0
Array.LastIndexOf(intArray,1)=2
三. C#数组的属性
一维数组和多维(二维以上)的数组的属性和方法都是差不多的,主要是在数组的方法上有些参数的不一致,现在我们先看下一维数组的有关属性;
int[] myint = new int[5];
for (int x = 1; x <= 5; x++)
myint[x - 1] = x;
Console.WriteLine("显示数组中的数据");
for (int i = 1; i <= 5; i++)
Console.WriteLine("第{0}个元素的值是{1}", i, myint[i-1]);
Console.WriteLine("显示数组的性质");
Console.WriteLine(myint.IsFixedSize);//是否固定大小
Console.WriteLine(myint.IsReadOnly);// 是否只读
Console.WriteLine(myint.IsSynchronized);//是否异步操作
Console.WriteLine(myint.Length);//数组的长度
Console.WriteLine(myint.LongLength);//数组的长度
Console.WriteLine(myint.Rank);//数组的维数
Console.WriteLine(myint.SyncRoot);//数组的对象
运行图如下:
数组元素的索引号是从0开始的,myint[0] 是数组的第一个元素,其最后一个元素是myint[ArraySize-1].如果索引号的值大于等于数组的长度,则会出现错误异常:
四. C#数组提供的方法
1. 常用的实例对象方法
Console.WriteLine(Array.IndexOf(myint,3)); //获取数组中元素为3在数组中的索引号 Console.WriteLine(Array.LastIndexOf(myint, 3)); //获取数组中元素为3在数组中的索引号,数组中最后与3匹配 Console.WriteLine(Array.AsReadOnly(myint));// Array.Reverse(myint);//将数组的元素 for (int i = 1; i <= 5; i++) Console.WriteLine("第{0}个元素的值是{1}", i, myint[i - 1]); |
|
Console.WriteLine(myint.GetLength(0));//获取指定维数的元素数
Console.WriteLine(myint.GetLongLength(0));
Console.WriteLine(myint.GetLowerBound(0));//获取指定维数的下限;
Console.WriteLine(myint.GetType());//当前实例对象的类型
Console.WriteLine(myint.GetValue(2));//获取数组中索引号为2的元素的值
Console.WriteLine(myint.GetHashCode());//获取对象的哈希吗
Console.WriteLine(myint.ToString());
Console.WriteLine(myint.GetEnumerator());//获取对象的枚举
myint.SetValue(111,0);//设置{newValue,index_of_Array
Console.WriteLine(myint[0]);
Console.WriteLine("Clone方法");
int[] orignalArray = { 1, 2, 3 };
int[] cloneArray = (int[])orignalArray.Clone();//克隆一个新的一样的数组
cloneArray[0] = 10;
cloneArray[1] = 20;
cloneArray[2] = 30;
foreach (int i in orignalArray)
Console.WriteLine(i);
foreach (int i in cloneArray)
Console.WriteLine(i);
int[] copyArr = new int[myint.Length];
myint.CopyTo(copyArr,0);//复制一个数组到另一个数组
Console.WriteLine("{0},{1},{2},{3},{4}", copyArr[0], copyArr[1], copyArr[2], copyArr[3], copyArr[4]);
Console.WriteLine("{0},{1},{2},{3},{4}", myint[0], myint[1], myint[2], myint[3], myint[4]);
int[] array_1 = new int[5];
for (int i = array_1.GetLowerBound(0); i <= array_1.GetUpperBound(0); i++)
array_1[i] = i + 1;//获取指定维数的下限 获取指定维数的上限
for (int j = array_1.GetLowerBound(0); j <= array_1.GetUpperBound(0); j++)
Console.WriteLine("array_1[{0}] = {1}", j, array_1[j]);
程序运行的结果是:
|
|