C#中的数组学习笔记

1、数组的声明与分配空间

数组:多个相同类型数据的组合。在C#中,数组为引用类型。

(1)一维数组的声明方式

Int[] a1; //注意方括号写到变量名的前面

Double[] b;

Mydate[] c;

C#语言中数组声明时不能指定其长度(数组中元素的个数) 例如:int a[5] 非法

(2)数组初始化

A、动态数组初始化

  数组定义与为数组元素分配空间并赋值的操作分开进行。  因为C#中的数组是引用型

例如:int[] a=new int[3];  //初始化

  a[0]=3;  a[1]=6;  a[2]=9  //赋值

MyDate[] dates;  //对象型数组

Dates=new MyDate[3];

dates[0]=new MyDate(22,7,1964);  dates[1]=new MyDate(1,7,1984); dates[2]=new MyDate(22,12,1964);

B、静态初始化

   在定义数组的同时就为数组元素分配空间并赋值。 注意:最后可以多一个逗号

例如:int[] a={3,9,8}; //也可以写成 int[] a= new int[]{3,9 8,};

MyDates[] dates={new MyDates(22,7,1964),new MyDates(1,7,1984),new MyDates(2,12,1964)};

C、数组元素的默认初始化

数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。  数值型是0,引用类型是null

例如: int[] a=new int[5];  //a[]中的每个元素均为0

3、数组元素的引用

index为数组元素下标,可以使整型常量或整型表达式。 例:a[3],b[i],c[6-i]

数组元素下标从0开始,长度为n的数组合法下标取值范围为0~n-1

每个数组都有一个属性Length指明它的长度。如:a.Length指明数组a的长度(元素个数)

4、foreach语句

foreach可以很方便地处理数组、集合中各元素。 foreach是只读式遍历(只能取值,无法改变)

如: int[] ages=new int[10];

foreach(int age in ages)

{

//……

}

5、复制数组

Array.Copy方法提供了数组元素复制功能:

Int[] source={1,2,3,4,5,6};  //源数组

Int[] dest={10,9,8,7,6,5,4,3,2,1}; //目的数组

//复制源数组中从下标0开始的source.Length个元素到目的数组,从下标0的位置开始存储

Array.Copy(source,0,dest,0,source.Length);

6、多维数组

二维数组举例: int[,] a={{1,2,3},{4,5,6},{7,8,9}};

可以用a.GetLength(0)获得数组的行数,a.GetLength(1)获得数组的列数

7、交错数组

C#中交错数组是数组的数组

例如:int[][] t=new int[3][];

  t[0]=new int[2];

  t[1]=new int[4];

  t[2]=new int[3];

C#中多维数组的声明和初始化应按照从高维到低维的顺序进行。

如:int [][]t1= new int[][4]; // 非法,与C++不同

------数组初始化实例:

 1 //#region 一维数组初始化显示
 2             //int[] arr1 = new int[6] { 23, 12, 4, 66, 74, 24 };
 3             //foreach (int n in arr1)
 4             //    Console.WriteLine("{0}", n + " ");
 5             //Console.WriteLine();
 6             //Console.WriteLine("请输入数组的下标:");
 7             //int i;
 8             //i = Convert.ToInt32(Console .ReadLine ());
 9             //Console.WriteLine(arr1[i]);
10             ////Console.ReadKey();
11             //#endregion
12 
13            /* #region 数组初始化显示
14             int[,] arr2 = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
15             Console .Write ("数组的行数为:");
16             Console.WriteLine(arr2.Rank);
17             Console.Write("数组的列数为:");
18             Console.WriteLine(arr2.GetUpperBound(arr2.Rank - 1)+1);
19             for (int j = 0; j < arr2.Rank; j++)
20             { 
21                 string s="";
22                 for (int k = 0; k <arr2.GetUpperBound(arr2.Rank - 1)+1; k++)
23                 {
24                     s = s + Convert.ToString(arr2[j, k]) + " ";
25                 }
26                 Console.WriteLine(s);
27             }
28             #endregion */
29 
30             int[] scores = new int[10];
31             int sum = 0;
32             //对数组中的元素进行赋值
33             for (int i = 0; i < scores.Length; i++)
34             {
35                 Console.Write("请输入第{0}个成绩:", i + 1);
36                 scores[i] = Convert.ToInt32(Console.ReadLine());
37                 //sum = sum + scores[i];
38             }
39             //Console.WriteLine("学生平均成绩为:" + (sum / 10));
40             
41             //通过一个for循环求学生的总成绩
42             for (int i = 0; i < scores.Length; i++)
43             {
44                 sum += scores[i];
45             }
46             //Console.Clear();   //清屏
47             Console.WriteLine("学生平均成绩为:" + (sum / scores .Length ));
48             //通过循环输出每一个学生的成绩
49             for (int i = 0; i < scores.Length; i++)
50             {
51                 Console.WriteLine("第{0}个学生的成绩为:{1}", i + 1, scores[i]);
52             }
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace 二维数组声明初始化
 7 {
 8     class Program
 9     {
10         static void Main(string[] args)
11         {
12             #region 二维数组初始化显示
13             int[,] arr2 = new int[3, 3] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8 ,9 } };
14             Console.Write("数组的行数为:");
15             Console.WriteLine(arr2.Rank);
16             Console.Write("数组的列数为:");
17             Console.WriteLine(arr2.GetUpperBound(arr2.Rank - 1) + 1);
18             for (int j = 0; j < arr2.Rank; j++)
19             {
20                 string s = "";
21                 for (int k = 0; k < arr2.GetUpperBound(arr2.Rank - 1) + 1; k++)
22                 {
23                     s = s + Convert.ToString(arr2[j, k]) + " ";
24                 }
25                 Console.WriteLine(s);
26             }
27             #endregion
28         }
29     }
30 }
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 
 6 namespace 动态二维声明初始化
 7 {
 8     class Program
 9     {
10         static void Main(string[] args)
11         {
12             Console.WriteLine("请输入定义数组的行数:");
13             int row = Convert.ToInt32(Console.ReadLine());
14             Console.WriteLine("请输入定义数组的列数:");
15             int col = Convert.ToInt32(Console.ReadLine());
16             int[,] arr2 = new int[row, col];
17             Console.WriteLine("结果:");
18             for (int i = 0; i < row; i++)
19             {
20                 for (int j = 0; j < col; j++)
21                 {
22                     if (i == j)
23                     {
24                         Console.Write("*");
25                     }
26                     else
27                     {
28                         Console.Write("@");
29                     }
30                 }
31                 Console.WriteLine();
32             }
33         }
34     }
35 }
原文地址:https://www.cnblogs.com/zyf2014/p/5427717.html