数组是相同数据类型的元素按一定顺序排列的集合,然后用一个变量名进行命名。新建控制台程序,声明一个静态方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoArray_1 { class Program { static void Main(string[] args) { ArraysDemo(); Console.ReadLine(); } static void ArraysDemo() { //定义数组变量 int[] myInts = new int[4]; string[] booksOnDotNet = new string[100]; //使用索引来填充数组 myInts[0] = 110; myInts[1] = 120; myInts[2] = 114; myInts[3] = 119; foreach (int i in myInts) Console.WriteLine(i); Console.WriteLine(); } } }
上面代码是使用构造函数来声明数组的,在声明的时候,并没有显式的填充数组值,此时数组中的每一项都会被设置成数据类型的默认值,比如Int类型的数组项默认值会被设置成0,bool类型数组则被设置成false
数组初始化
static void ArrayInit() { //使用new关键字来创建数组,未指定大小 string[] ColorsArray = new string[] { "red", "green", "blue", "black" }; Console.WriteLine("ColorsArray has {0} elemnets", ColorsArray.Length); //不使用new关键字,使用字面值初始化数组 int[] VarArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Console.WriteLine("VarArray has {0} elements ", VarArray.Length); //使用new关键并指定大小,创建数组 char[] CharArray = new char[3] { 'a', 'b', 'c' }; Console.WriteLine("CharArray has {0}", CharArray.Length); }
在用花括号创建数组时,不需要指定数组的大小,由花括号中的元素个数自动确定数组大小,另外new关键字也是可选的
定义隐式类型本地数组
static void DefinedImplicitArray() { //使用var关键字来定义隐式类型本地数组,注意数组元素必须是同一类型 var myInt=new[] {110,120,114,119}; Console.WriteLine("myInt is {0}", myInt.ToString()); }
需要注意是数组元素的类型必须是同一类型
定义Object数组
我们知道在.Net中所有内置类型的父类型都是System.Object类型,如果定义一个Object类型的数组,会发生什么?
static void ObjcetsArray() { object[] myObjects = new object[3]; myObjects[0] = 1; //int类型 myObjects[1] = "this is a demo"; //string类型 myObjects[2] = true; //boolean类型 foreach (object i in myObjects) Console.WriteLine("Type is {0},Value is {1}", i.GetType(), i); }
输出如下:
从输出可以看出,使用object创建数组时,元素可以是任何类型,因为所有内置类型最终都会被转化成Object类型
定义矩形数组
除一维数组外,C#还支持两种多维数组:①矩形数组;②交错数组
矩形数组:每行长度相同,如下面的二维数组
static void RectArray() { int[,] MatrixArray; MatrixArray=new int[10,10]; //填充数组 for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) MatrixArray[i, j] = i + j; //输出数组 for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) Console.Write(MatrixArray[i, j] + " "); Console.WriteLine(); }
在上面的代码中使用" " 用于插入一个水平制表符,并且使用Write输出,以获得6x6的矩形输出效果
定义交错数组
交错数组也就是数组中数组
static void CrossArray() { //声明一个具有3个不同数组的数组 int[][] myCrossArray = new int[3][]; Console.WriteLine(myCrossArray.Length); //获取的数组大小是3,即上面代码是声明三个数组 //创建交错的数组 for (int i = 0; i < myCrossArray.Length; i++) myCrossArray[i] = new int[i + 7]; //第一个数组元素有7个,第二个数组元素8,依次类推 //输出数组 for(int i=0;i<3;i++) { for(int j=0;j<myCrossArray[i].Length;j++) Console.Write(myCrossArray[i][j]+" "); Console.WriteLine(); } }
上面代码没有给交错数组 填充值,所以所有数组元素的默认值都为0,下图是上面两种数组运行结果
用数组传参
//向方法中传入数组 static void PrintArray(int[] ints) { for (int i = 0; i < ints.Length; i++) Console.WriteLine("{0}的索引是{1}", ints[i], i); } //从方法获取string类型的数组 static string[] GetValueArray() { string[] varString = { "one", "two", "three" }; return varString; }
在Main()方法中,进行调用 //调用PrintArray方法 int[] tels = { 110, 120, 114, 119 }; PrintArray(tels); //调用GetValueArray,会获得一个数组 string[] strs = GetValueArray(); foreach (string s in strs) Console.WriteLine(s);
System.Array功能演示
每一个被创建的数组都继承自Array基类。Array基类有很多常用功能,特别是静态成员,可以在类级别进行调用。
下表是Array的常用成员
static void SystemArray() { string[] strs = { "China" }; //利用Length属性,输出数组元素 for(int i=0;i<strs.Length;i++) { Console.Write(strs[i] + " "); } //利用Reverse()方法反转数组 Array.Reverse(strs); for (int i = 0; i < strs.Length; i++) { Console.Write(strs[i] + " "); } //待续 }