一、一维数组
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShuZu : MonoBehaviour
{
#region 知识点一 基本概念
//数组是存储一组相同类型数据的集合
//数组分为 一维、二维、交错数组
//一般情况 一维数组 就简称为数组
#endregion
#region 知识点二 数组的申明
//变量类型[] 数组名;//只是申明了一个数组,但是并没有开放
//变量类型 可以是我们学过的 或者 没学过的所有变量类型
int[] arr1;
//变量类型[] 数组名=new 变量类型[数组的长度];
int[] arr2 = new int[5];//这种方式 相当于开了5个房间 但是房间里面的int值 默认为0
//变量类型[] 数组名 =new 变量类型[数组的长度]{内容1,内容2,内容3,....};
int[] arr3 = new int[5] { 1, 2, 3, 4, 5 };
//变量类型[] 数组名 =new 变量类型[] {内容1,内容2,内容3,....};
int[] arr4 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };//后面的内容就决定了 数组的长度 "房间数"
//变量类型[] 数组名={内容1,内容2,内容3,....};
int[] arr5 = { 1, 3, 4, 5, 6 };//后面的内容就决定了 数组的长度 "房间数"
#endregion
// Start is called before the first frame update
void Start()
{
#region 知识点三 数组的使用
int[] array = { 1, 2, 3, 4, 5 };
//1.数组的长度
Debug.Log(array.Length);
//2.获取数组中的元素
//数组中的下标和索引 他们是从0开始的
//通过 索引下标去 获得数组中某一个元素的值时
//一定注意!!!!!
//不能越界
Debug.Log(array[0]);
//3.修改数组中的元素
array[0] = 99;
Debug.Log(array[0]);
//4.遍历数组 通过循环 快速获取数组中的每一个元素
for (int i = 0; i < array.Length; i++)
{
Debug.Log(array[i]);
}
//5.增加数组的元素
//组数初始化以后 是不能够 直接添加新的元素的
int[] array2 = new int[6];
for(int i = 0; i < array.Length; i++)
{
array2[i] = array[i];
}
array = array2;
for (int i = 0; i < array.Length; i++)
{
Debug.Log(array[i]);
}
array[5] = 999;
//6.删除数组的元素
//数组初始化以后 是不能够 直接删除元素的
//搬家的原理
int[] array3 = new int[5];
//搬家
for (int i = 0; i < array3.Length; i++)
{
array3[i] = array[i];
}
array = array3;
Debug.Log(array.Length);
//7.查找数组中的元素
//99 2 3 4 5
//要查找 3这个元素在哪个位置
//只有通过遍历才能确定 数组中 是否存储了一个目标元素
int a = 3;
for (int i = 0; i < array.Length; i++)
{
if (a == array[i])
{
Debug.Log("和a相等的元素在{0}" + i);
}
}
#endregion
}
//总结
//1.概念:同一变量类型的数据集合
//2.一定要掌握知识:申明,遍历, 增删查改
//3.所有的变量类型都可以申明为 数组
//4.它是用来批量存储游戏中的同一类型对象的 容器
}
一维数组练习:
#region 练习题一 //请创建一个一维数组并赋值,让其值与下标一样,长度为100 int[] arr1 = new int[100]; for (int i = 0; i < arr1.Length; i++) { arr1[i] = i; Console.WriteLine(arr1[i]); } #endregion
#region 练习题二 //创建另一个数组B,让数组A中的每个元素的值乘以2存入到数组B中 int[] arrayA = new int[10]; int[] arrayB = new int[10]; for (int i = 0; i < arrayB.Length; i++) { arrayB[i] = arrayA[i]*2; Console.WriteLine(arrayB[i]); } #endregion
#region 练习题三 //随机(0--100)生成1个长度为10的整数数组 int[] array=new int[10]; Random r= new Random(); for(int i = 0; i < array.Length; i++) { array[i] =r.Next(0,101);//左包含右不包含 Console.WriteLine(array[i]); } #endregion
#region 练习题四 //从一个整数数组中找出最大值 最小值 总和 平均值 //(可以使用随机数1--100) int[] arrayInt= new int[10]; Random c=new Random(); for(int i = 0; i < arrayInt.Length; i++) { arrayInt[i] = c.Next(0, 101); Console.WriteLine(arrayInt[i]); } //第一次进入时 不存在 最大最小的概念 //可以认为 第一次 最大值最小值 都是第一个数 int min = 0; int max = 0; int sum = 0; int avg = 0; for (int i = 0; i < arrayInt.Length; i++) { //如果当前的值 比min还要小 那么当前的值就是最小的值 if (min > arrayInt[i]) { min = arrayInt[i]; } //如果当前的值 比max还要大 那么当前的值就是最大的值 if (max < arrayInt[i]) { max = arrayInt[i]; } //每一次的值加上去 就是总和 sum += arrayInt[i]; } avg=sum/arrayInt.Length; #endregion
#region 练习题五 //交换数组中的第一个和最后一个、第二个和倒数第二个、依次类推,把数组进行反转并打印 int[] array5= new int[10]; Random ra= new Random(); for (int i = 0; i < array5.Length; i++) { array5[i] = ra.Next(0, 101); Console.WriteLine(array5[i]); } Console.WriteLine("****************"); //交换 那就中间商不赚差价 //int temp = array5[0]; //array5[0] = array5[array5.Length-1]; //array5[array5.Length-1]= temp; //temp = array5[1]; //array5[1]= array5[array5.Length-1-1]; //array5[array5.Length - 1 - 1] = temp; //temp = array5[2]; //array5[2] = array5[array5.Length - 1 - 1-1]; //array5[array5.Length - 1 - 1-1] = temp; for (int i = 0;i < array5.Length/2; i++) { int temp = array5[i]; array5[i] = array5[array5.Length - i - 1]; array5[array5.Length - i - 1] = temp; } for (int i = 0;i<array5.Length ; i++) { Console.WriteLine(array5[i]); } #endregion
#region 练习题六 //将一个整数数组的每一个元素进行如下的处理: //如果元素时正数则将这个位置的元素值加1; //如果元素是负数则将这个位置的元素值减1; //如果元素是0,则不变 int[] array6= new int[10]; Random ran= new Random(); for (int i = 0; i < array6.Length; i++) { array6[i] = ran.Next(-10, 11); Console.WriteLine(array6[i]); } Console.WriteLine("$$$$$$$$$$$$$$$$$$$$$$$$"); for (int i = 0; i < array6.Length; i++) { //得到每一个元素 进行判断即可 if (array6[i] > 0) { array6[i] +=1; } else if (array6[i] < 0) { array6[i] -=1; } else if (array6[i]==0) { array6[i] = array6[i]; } Console.WriteLine(array6[i]); } #endregion
#region 练习题七 //定义一个有10个元素的数组,使用for循环,输入10名同学的数学成绩 //将成绩依次存入数组,然后分别求出最高分和最低分 //并且求出10名同学的数学平均成绩 int[] array7= new int[10]; try { int min2 = 0; int max2 = 0; int sum2 = 0; int avg2 = 0; for (int i = 0; i < array7.Length; i++) { Console.WriteLine("请输入第{0}位同学的成绩", i+1); array7[i] = int.Parse(Console.ReadLine()); //第一次进来 min max 没有任何意义 所以第一次可以就认为该成绩即使 最高分也是最低分 if (i == 0) { min2 = array7[i]; max2 = array7[i]; } else { //只有除了第一次以外 才来进行 大小值的判断 if (min2 > array7[i]) { min2 = array7[i]; } else if (max2 < array7[i]) { max2 = array7[i]; } } sum2 += array7[i]; } avg2 = sum2 / array7.Length; Console.WriteLine("最低分{0}最高分{1}总成绩{2}平均值{3}", min2, max2, sum2, avg2); } catch (Exception) { Console.WriteLine("请输入数字"); } #endregion
#region 练习题八 //请声明一个string类型的数组(长度为25)(该数组中存储着符号) //通过遍历数组的方式取出其中存储的符号打印出以下效果 string[] array8= new string[25]; for (int i = 0; i < array8.Length; i++) { array8[i] = i % 2 == 0 ? "■" :"□"; //if (i % 2 == 0) //{ // array8[i] = "■"; //} //else //{ // array8[i] = "□"; //} } for (int i = 0; i < array8.Length; i++) { if (i%5==0&&i!=0) { Console.WriteLine(); } Console.Write(array8[i]); } #endregion
二、二维数组
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 二维数组
{
internal class Program
{
static void Main(string[] args)
{
#region 知识点一 基本概念
//二维数组 是使用两个下标(索引)来确定元素的数组
//两个下标可以理解成 行标 和 列标
//比如矩阵
//1 2 3
//4 5 6
//可以用二维数组 int[2,3]表示
//好比 两行 三列的数据集合
#endregion
#region 知识点二 二维数组的申明
//变量类型[,] 二维数组变量名;
int[,] arr;//申明过后 会在后面进行初始化
//变量类型[,] 二维数组变量名 =new 变量类型[行,列];
int[,] arr2 = new int[3, 3];
//变量类型[,] 二维数组变量名 =new 变量类型[行,列]{{0行内容1,0行内容2,0行内容3.....},{1行内容1,1行内容2,1行内容3.....}....};
int[,] arr3=new int[3, 3] { { 1,2,3},
{ 4,5,6},
{ 7,8,9}};
//变量类型[,] 二维数组变量名=new 变量类型[,]{{0行内容1,0行内容2,0行内容3.....},{1行内容1,1行内容2,1行内容3.....}....};
int[,] arr4 = new int[3, 3] { { 1,2,3},
{ 4,5,6},
{ 7,8,9}};
//变量类型[,] 二维数组变量名={{0行内容1,0行内容2,0行内容3.....},{1行内容1,1行内容2,1行内容3.....}....};
int[,] arr5 ={ { 1,2,3},
{ 4,5,6},
{ 7,8,9}};
#endregion
#region 知识点三 二维数组的使用
int[,] array1 = new int[,] { { 1, 2, 3 },
{ 4, 5, 6 } };
//1.二维数组的长度
//我们要获取 行和列分别是多长
//得到多少行
Console.WriteLine(array1.GetLength(0));
//得到多少列
Console.WriteLine(array1.GetLength(1));
//2.获取二维数组中的元素
//注意:第一个元素的索引是0 最后一个元素的索引 肯定是长度-1
Console.WriteLine(array1[0, 1]);
Console.WriteLine(array1[1, 2]);
//3.修改二维数组中的元素
array1[0, 0] = 99;
Console.WriteLine(array1[0, 0]);
Console.WriteLine("#######################");
//4.遍历二维数组
for (int i = 0; i <array1.GetLength(0); i++)
{
for (int j = 0; j < array1.GetLength(1); j++)
{
//i行 0 1
//j列 0 1 2
Console.WriteLine(array1[i, j]);
//0,0 0,1 0,2
//1,0 1,1 1,2
}
}
//5.增加数组的元素
//数组申明初始化过后 就不能在原有的基础上进行 添加 或者删除了
int[,] array2 = new int[3, 3];
for (int i = 0; i < array1.GetLength(0); i++)
{
for(int j = 0;j < array1.GetLength(1); j++)
{
array2[i, j] = array1[i,j];
}
}
array1 = array2;
array1[2, 0] = 7;
array1[2, 1] = 8;
array1[2, 2]=9;
//6.删除数组的元素
//7.查找数组中的元素
//如果要在数组中查找一个元素是否等于某个值
//通过遍历的形式去查找
#endregion
//总结:
//1.概念:同一变量类型的 行列数据集合
//2.一定要掌握内容:申明,遍历,增删查改
//3.所有的变量类型都可以神明为 二维数组
//4.游戏中一般用来储存 矩阵,再控制台小游戏中可以用二维数组 来表示地图格子
}
}
}
二维数组练习:
#region 练习题一 //将1到10000赋值给一个二维数组 (100行100列) int[,] array1 = new int[100, 100]; int index = 1; for (int i = 0; i < array1.GetLength(0); i++) { for (int j = 0; j < array1.GetLength(1); j++) { array1[i, j] = index; ++index; Console.WriteLine(array1[i, j] + " "); } } #endregion
#region 练习题二
//将二维数组(4行4列)的右上半部分置零(元素随机1--100)
int[,] array2 = new int[4, 4];
Random r = new Random();
for (int i = 0; i < array2.GetLength(0); i++)
{
for (int j = 0; j < array2.GetLength(1); j++)
{
if (i<=1 && j > 1)
{
array2[i, j] = 0;
}
else
{
array2[i, j] = r.Next(1, 101);
}
Console.Write(array2[i, j] + " ");
}
Console.WriteLine();
}
#endregion
#region 练习题三
//求二维数组(3行3列)的对角线元素的和(元素随机1--10)
int[,] array3 = new int[3, 3];
Random ra = new Random();
int sum3 = 0;
for (int i = 0; i < array3.GetLength(0); i++)
{
for (int j = 0; j < array3.GetLength(1); j++)
{
array3[i, j] = ra.Next(1, 11);
//对角线元素满足的条件
if (i == j || i + j == 2)
{
sum3 += array3[i, j];
}
Console.Write(array3[i, j] + " ");
}
Console.WriteLine();
}
Console.WriteLine(sum3);
#endregion
#region 练习题四
//求二维数组 (5行5列) 中最大元素值及其行列号(元素随机1--500)
int[,] array4=new int[5, 5];
Random r5= new Random();
//就是记录 最大值的 行列号
int maxI = 0;
int maxJ = 0;
for (int i = 0;i < array4.GetLength(0); i++)
{
for (int j = 0; j < array4.GetLength(1); j++)
{
array4[i, j] = r5.Next(1, 501);
//找最大值
if (array4[maxI, maxJ] < array4[i,j])
{
maxI = i;
maxJ=j;
}
Console.Write(array4[i, j] + " ");
}
Console.WriteLine();
}
Console.WriteLine("最大值为{0},行{1}列{2}",array4[maxI,maxJ],maxI,maxJ);
#endregion
#region 练习题五
//给一个M*N的二维数组,数组元素的值为0或者1,
//要求转换数组,将含有1的行和列全部置1
int M = 5;
int N=5;
int[,] array5=new int[M, N];
Random ra5=new Random();
bool[] hang=new bool[5];
bool[] lie=new bool[5];
for (int i = 0; i < array5.GetLength(0); i++)
{
for(int j = 0;j < array5.GetLength(1); j++)
{
array5[i, j] = ra5.Next(0, 2);
if (array5[i,j]==1)
{
//记录了 当前 行列 是否要变1的标识
//要变一 就置true
hang[i] = true;
lie[i] = true;
}
Console.WriteLine(array5[i, j] + " ");
}
Console.WriteLine();
}
for (int i = 0; i < array5.GetLength(0); i++)
{
for (int j = 0; j < array5.GetLength(1); j++)
{
//满足行和列的标识 是true 就变一
if (hang[i] || lie[j])
{
array5[i, j] = 1;
}
Console.Write(array5[i, j]+" ");
}
Console.WriteLine() ;
}
#endregion
三、交错数组
using System;
namespace 交错数组
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("非重点知识:交错数组");
#region 知识点一 基本概念
//交错数组 是 数组的数组,每个维度的数量可以不同
//注意:二维数组的每行的列数相同,交错数组每行的列数可能不同
#endregion
#region 知识点二 数组的申明
//变量类型[][] 交错数组名
int[][] arr1;
//变量类型[][] 交错数组名 =new 变量类型[行数][];
int[][] arr2 = new int[3][];
//变量类型[][] 交错数组名 =new 变量类型[行数][]{一维数组1,一维数组2,.......};
int[][] arr3 = new int[3][] { new int[] { 1, 2, 3 },
new int[] {1,2,3},
new int[] { 1} };
//变量类型[][] 交错数组名 =new 变量类型[][]{一维数组1,一维数组2,.......};
int[][] arr4 = new int[][] { new int[] { 1, 2, 3 },
new int[] {1,2,3},
new int[] { 1} };
//变量类型[][] 交错数组名 ={一维数组1,一维数组2,.......};
int[][] arr5 ={ new int[] { 1, 2, 3 },
new int[] {1,2,3},
new int[] { 1} };
#endregion
#region 知识点三 数组的使用
int[][] array = {new int[] { 1, 2,3 },
new int[] { 4, 5,}};
//1.数组的长度
//行
Console.WriteLine(array.GetLength(0));
//得到某一行的列数
Console.WriteLine(array[0].Length);
//2.获取交错数组中的元素
//注意:不要越界
Console.WriteLine(array[0][1]);
//3.修改交错数组中的元素
array[0][1] = 99;
Console.WriteLine(array[0][1]);
//4.遍历交错数组
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array[i].Length; j++)
{
Console.WriteLine(array[i][j] +" ");
}
Console.WriteLine();
}
#endregion
//总结
//1.概念:交错数组 可以存储同一类型的m行不确定列的数据
//2.一定要掌握的内容:申明 遍历 增删查改
//3. 所有的变量类型都可以申明为 交错数组
//4. 一般交错数组很少使用 了解即可
}
}
}