C#基础知识(数组)

1、数组引入的必要性


     当我们需要很多个变量(同种类型)之间可能会进行一些运算,
     那么以我们现有的知识储备需要定义多个变量而且名字还不能重复,
     这样代码就会非常冗余,而且可读性极差--(遇到麻烦了)


2、数组定义


     数组就是一些数据的集合 而且这些数据在内存中的存放地址是连续的
     注意:这些数据的类型都是一样的
     数组类型----引用类型
     语法定义格式:
     数据类型[] 数组名=new 数据类型[数量];
     new--表示在托管堆中申请一块内存用来存放数据  关键字
     数组在定义的时候长度(数量)一定是固定的  
     每个数据的类型是一样的


3、数组如何进行初始化以及赋值、遍历数组的元素  、数组的元素 、数组索引


     数组的初始化--就是数组在定义时同时给每个元素赋值
     初始化数组有三种语法形式:(一定是在定义的时候)
     int[] a=new int[6]{12,34,56,12,34,56};
     int[]a=new  int[]{12,34,56}
     int[]a={12,34,56,12}
     数组索引--代表的是数组元素的所在位置,给位置做的编号,编号就是索引,但是这里特别注意
     位置编号从0开始。第一个位置索引应该是0 第二个位置索引应该1 依次类推 
     最后一个元素它的索引应该是数组的长度减1。访问元素的时候我们通常是通过索引
     来访问具体元素。具体的访问数组元素的语法:
     数组名[索引号]--------这个整体就代表对应索引号的数组元素
      注意:索引号不能大于等于数组的长度 如果出现大于等于数组的长度
      这叫数组越界---编译的时候不会报错  运行的时候会报越界错误
      索引很多时候可以是变量 这个变量变化就对应不同元素
     数组的元素--数组中的每个数据称为数组的元素
     数组元素的赋值----改变数组元素的值
     访问数组元素---数组名[索引号]=值;
     数组的遍历:依次访问数组中的每个元素的过程就叫做遍历数组
       for(int i=0;i< 数组名.Length;i++)
       {
        语句;
       }
       foreach(var item in 数组名)
       {
    语句;
       }
     数组长度:数组中元素的个数  数组名.Length---得到数组的长度

4、数组扩容

 int[] array1=new int[5];  //原数组长度为5
            int[] item=new int[array1.Length];  //创建长度一样的临时数组
            for (int i = 0; i < array1.Length; i++)
            {
                item[i] = array1[i];  //将原数组元素放入临时数组
            }        
            array1 = new int[5];  //原数组重置长度
            int count = 5;
            array1 = new int[array1.Length+count];  //在原数组基础上增加5的长度
            for (int i = 0;i < item.Length;i++)  //临时数组值返回原数组
            {
                array1[i] = item[i];
            }
            Console.ReadKey();

5、数组删除指定元素

 //删除索引3对应的值
            int[] array1=new int[5] {12,45,47,45,45 };  //原数组
            int[] item=new int[array1.Length];  //创建长度一样的临时数组
            for (int i = 0; i < array1.Length; i++)
            {
                item[i] = array1[i];  //将原数组元素放入临时数组
            }        
            array1 = new int[array1.Length-1];  //原数组重置长度-1
            int k = 0;
            for (int i = 0;i < item.Length;i++)  //临时数组值返回原数组,不要的值去掉
            {
                if (i!=3)   //索引不为3传值
                {
                    array1[i] = item[i];
                }  
                k++;
            }
            Console.ReadKey();

6、可变数组

在使用数组作为形参时,C# 提供了 params 关键字,使调用数组为形参的方法时,既可以传递数组实参,也可以传递一组数组元素。
 1.带 params 关键字的参数类型必须是一维数组,不能使用在多维数组上;
 2.使用params参数后实参可以传一个数组,也可以传;
 3.带 params 关键字的参数必须是最后一个参数,并且在方法声明中只允许一个 params 关键字。
 4.不能仅使用 params 来使用重载方法。
 5.没有 params 关键字的方法的优先级高于带有params关键字的方法的优先级

static void Main(string[] args)
        {
            int a = 0;
            string b = "qqq";
            Print(ref a,b,new int[] { 12,14,15,14,});
            Print(ref a, b,  12, 14, 15, 14,58);  //可变数组写法
            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.ReadKey();
        }
        public static void Print(ref int a,string b, params int[] c)
        {
            a = 132;
            b = "qwerfdsa";
        }

常见习题:

冒泡排序:

//冒泡排序
            int[] b = { 654, 34, 99, 98, 3, 112, 12, 11, 22 };
            for (int i = 0; i < b.Length; i++)  //比几次,i==第几次比,9个数 一共比9次,也可以比8次
            {
                for (int j = 0; j < b.Length - 1 - i; j++)     //第一次for循环9个数全部比一遍比8遍,找出最大值/最小值放最后面(下次不用比),第二次for循环8个数要比7遍,以此类推...
                {
                    if (b[j] > b[j + 1])
                    {
                        int c = b[j];
                        b[j] = b[j + 1]; b[j + 1] = c;
                    }
                }
                Console.WriteLine();
            }
            for (int i = 0; i < b.Length; i++) { Console.Write($"{b[i]}\t"); }
            Console.ReadKey();


 4、二维数组 和 交错数组

1、二维数组定义

语法定义格式:
     数据类型[,] 数组名=new 数据类型[(行)数量,(列)数量];

            int[,] aa2 = { { 45, 52, 45 }, { 23, 45, 45 }, { 23, 56, 33 }, { 98, 09, 56 } };   //有几个花括号就有几行,花括号里有几个数就有几列,这个就是4行3列的二维数组,用值表示就是[4,3],索引值从0,0开始
            //二维数组遍历
            for (int i = 0; i < aa2.GetLength(0); i++)
            {
                for (int j = 0; j < aa2.GetLength(1); j++)
                {
                    Console.WriteLine($"{aa2[i, j]}");
                }

2、三维数组定义

语法定义格式:三维数组每行的列数可以不一样,定义时行数需要定义数量,列数不需要定义
     数据类型[][] 数组名=new 数据类型[(行)数量][];

            / 三维数组定义
            int[][] aaa = new int[4][];        //三维数组每行的列数可以不一样,定义时行数需要定义数量,列数不需要定义

            int[][] ccc = {
                             new int[]{11,23,22 },
                             new int[]{ 88,13},
                             new int[] { 58, 42, 88,25 },
                               };                //赋初值时必须在每行值前加   new 数据内型 [], 相当于几行就是几个一维数组

            三维数组遍历
                int[][] ss = new int[3][] { new int[] { 2, 3, 5 }, new int[] { 23, 55, 66 }, new int[] { 55 } };
            for (int i = 0; i < ss.GetLength(0); i++)           //先遍历每一行
            {
                for (int j = 0; j < ss[i].Length; j++)          //再遍历每一行的个数
                {
                    Console.WriteLine(ss[i][j]);
                }
            }

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值