C# 基础Array

一、Array的作用

  连续定义多个相同类型的变量,比如我定义1000个学生的学生年龄,int[] age = new int[1000];不需要慢慢的一个一个变量的定义,数组是不是很方便。

需要注意的:1)Array是引用类型。引用类型是传递栈中的地址。2)数组都是由连续的内存位置组成的。

二、Array定义与赋值

1)先定义再赋值比如:

 1             //定义100个学生的成绩
 2             //第一种定义并初始化方式
 3             int[] studentSorce = new int[100];
 4             studentSorce[0] = 78;
 5             studentSorce[1] = 95;
 6             //第二种定义并初始化方式
 7             int[] studentSorce02 = new int[5]{78,95,84,76,59};
 8             //第三种定义并初始化方式
 9             int[] studentSorce03 = new int[] { 78, 95, 84, 76, 59 };
10             //第四种定义并初始化方式
11             int[] studentSorce04 = { 78, 95, 84, 76, 59 };
12             //二维定义方式
13             int[,] arr = new int[3, 4];
14             //二维定义并赋值,3行4列
15             int[,] arr02 = new int[3, 4] { { 75,96,83,65 }, { 78, 95, 84, 76 },{86,66,73,77} };

2)二维数组遍历

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace ArrayTest
 8 {
 9 
10     class Program
11     {
12         public static int[,] array2D;        //定义二维数组,没赋值数组长度
13 
14         /// <summary>
15         /// 随机生成二维数组
16         /// </summary>
17         /// <param name="rows">一维(行)</param>
18         /// <param name="columns">二维(列)</param>
19         public static void RaArray2D(int rows, int columns)
20         {
21             Random ra = new Random();
22             array2D = new int[rows, columns];
23             for (int i = 0; i < array2D.GetLength(0); i++)
24             {
25                 for (int j = 0; j < array2D.GetLength(1); j++)
26                 {
27                     array2D[i, j] = ra.Next(10, 101); //范围10-100的随机数
28                 }
29             }
30         }
31         /// <summary>
32         /// 遍历二维数组
33         /// </summary>
34         /// <param name="arr2D">二维数组</param>
35         public static void EachArray2D(int[,] arr2D)
36         {
37             for (int i = 0; i < arr2D.GetLength(0); i++)
38             {
39                 for (int j = 0; j < arr2D.GetLength(1); j++)
40                 {
41                     Console.Write(arr2D[i, j].ToString().PadRight(4, '\u0000'));
42                 }
43                 Console.WriteLine();
44             }
45         }
46 
47         static void Main(string[] args)
48         {
49             RaArray2D(5, 10);
50             EachArray2D(array2D);
51 
52             Console.WriteLine(array2D.Length);//显示二维数组总长度.
53             Console.WriteLine(array2D.Rank);    //数组维度
54 
55             Console.ReadKey();
56 
57         }
58 
59     }
60 }

3)数组初始化的值,代码 int[] studentSorce = new int[5]; 我们进行两步创建。

            int[] x;            //定义int[]的数组,没有赋值.
            x = new int[5];     //赋值后x[0]...x[4]初值0

这样我们就可以在类中定义数组,然后在方法中赋值。如下

public static int[] newArr;   //在类中定义,然后在方法中赋值。估计可行。

三、Array常用方法

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace ArrayTest
 8 {
 9 
10     class Program
11     {
12         public static int[] array1D;        //声明array1D变量,该变量的类型为int[]
13         /// <summary>
14         /// 随机生成一维数组
15         /// </summary>
16         /// <param name="number">表示数组的长度</param>
17         public static void RaArray(int number)
18         {
19             array1D = new int[number];      //创建了一个数组,将数组的地址赋值给array1D
20             Random ra = new Random();
21             for (int i = 0; i < array1D.Length; i++)
22             {
23                 array1D[i] = ra.Next(30, 101); //随机范围30-100
24             }
25         }
26         /// <summary>
27         /// 遍历数组方法
28         /// </summary>
29         public static void EachArray()
30         {
31             for (int i = 0; i < array1D.Length; i++)
32             {
33                 Console.Write(array1D[i].ToString().PadRight(4, '\u0000'));
34             }
35         }
36 
37 
38         static void Main(string[] args)
39         {
40             RaArray(10);    //生成随机数组方法
41             EachArray();    //遍历数组的方法
42             //下面介绍一些数组的方法
43             Console.WriteLine();    //换行
44             Array.Sort(array1D);    //排序由小到大
45             EachArray();
46             Console.WriteLine();    //换行
47             Array.Reverse(array1D); //数组元素反转
48             EachArray();
49             Console.WriteLine();    //换行
50             int max = array1D.Max();
51             int min = array1D.Min();
52             int sum = array1D.Sum();
53             double avg = array1D.Average();
54             Console.WriteLine("array1D数组的最大值:{0},最小值:{1},和:{2},平均值:{3}", max, min, sum, avg);
55             Console.WriteLine();    //换行
56             Console.WriteLine("输入要查询的数字");
57             int chaXun = int.Parse(Console.ReadLine());
58             bool isContains = array1D.Contains(chaXun); //查询数组是否包含指定数,返回bool
59             Console.WriteLine(isContains);
60             Console.WriteLine();
61             int[] newArray1d = new int[array1D.Length];
62             array1D.CopyTo(newArray1d, 0); //将array1D的所有元素复制给newArray1D
63             for (int i = 0; i < newArray1d.Length; i++)
64             {
65                 Console.Write(newArray1d[i].ToString().PadRight(4, '\u0000'));
66             }
67             Console.WriteLine("输入数字,检索第一次出现的索引值");
68             int number = int.Parse(Console.ReadLine());
69             int firstIndex = Array.IndexOf(array1D, number); //搜索array1D中第一次出现指定值的索引值
70             int laseIndex = Array.LastIndexOf(array1D, number); //最后一次出现的索引值.
71 
72             Console.WriteLine("搜索第一次出现{0}位置索引号为:{1},最后一次出现的索引号为{2}", number, firstIndex, laseIndex);
73 
74             Console.WriteLine(Array.Find(array1D, item => item > 5)); //数组中第一个大于5的数字
75             Console.WriteLine(Array.FindLast(array1D, items => items < 90)); //检索数组最后一个大于90的值并输出
76             foreach (int item in Array.FindAll(array1D,item=>item>50)) //遍历所有大于50的值
77             {
78                 Console.Write("大于50的有{0}", item); 
79             }
80             Console.WriteLine(); //换行
81             //第一个大于50的索引值,和最后一个大于50的索引值
82             Console.WriteLine("第一个大于50的索引是:{0},最后大于50的是{1}", Array.FindIndex(array1D, item => item > 50), Array.FindLastIndex(array1D, item => item > 50));
83             Console.ReadKey();
84         }
85 
86     }
87 }

四、交错数组

交错数组:每行元素个数不想等的二维数组。有时也称“数组的数组”定义、初始化、遍历如下代码:

 1             //交错数组,定义与初始化
 2             int[][] interleavedArray = new int[4][];
 3             interleavedArray[0] = new int[4] { 17, 14, 36, 43 };//第一行4个元素
 4             interleavedArray[1] = new int[] { 77, 34 };     //第二行2个元素
 5             interleavedArray[2] = new int[3] { 55, 76, 89 };
 6             interleavedArray[3] = new int[6] { 33, 23, 56, 75, 46, 52 };
 7             //遍历交错数组
 8             //先测试下交错数组1维长度(行)
 9             Console.WriteLine(interleavedArray.GetLength(0));   //第一种方法,获取第一维长度
10             Console.WriteLine(interleavedArray.Length);      //推荐使用,获取第一维长度.标准用法
11             Console.WriteLine(interleavedArray[0].Length); //(第一行有多少列)
12             Console.WriteLine(interleavedArray[1].Length); //第二行有多少列
13             //下面遍历的问题就容易了
14             Console.ForegroundColor = ConsoleColor.Cyan;
15 
16             for (int i = 0; i < interleavedArray.Length; i++)   //行,一维
17             {
18                 for (int j = 0; j < interleavedArray[i].Length; j++)    //列,二维
19                 {
20                     Console.Write(interleavedArray[i][j].ToString().PadRight(4, ' '));
21                 }
22                 Console.WriteLine();
23             }

交错数组应用代码如下: