using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace learn_list2
{
    internal class Program
    {
        static void PrintList(int[] list, string var_name)
        {
            for (int i = 0; i < list.Length; i++)
            {
                Console.WriteLine($"列表{var_name}的第{i}个元素为{list[i]}");
            }
        }
        static void Main(string[] args)
        {   
            // 数组入门
            // 数组在生成对象的时候必须要指定数组的长度
            int[] ints = new int[7];
            ints[3]=5;
            // 数组的输出方式:foreach输出,这种方式输出的是只读的,不能修改形参i的值
            foreach (int i in ints)
            {
                Console.WriteLine(i);
            }
            // 数组的输出方式:for输出,这种方式输出的是可写的,可以修改列表的值
            int s = 0;
            for (int i = 0; i < ints.Length; i++)
            {
                s += ints[i];
                ints[i] = s;
                Console.WriteLine(ints[i]);
            }

            // 数组的几种定义方式
            // 第一种:先实例化再初始化
            int[] ints1;
            ints1 = new int[] { 1, 2, 4, 5};
            PrintList(ints1, "ints1");

            // 第二种:在实例化的时候直接初始化
            int[] ints2 = { 1,2,3,4,5};
            PrintList(ints2, "ints2");
            int[] ints3 = new int[] { 1,2,3,4,5};
            PrintList(ints3, "ints3");
            int[] ints4 = new int[5] { 1,2,3,4,5}; // 指定数组长度的时候,数组长度必须和实际长度一致
            PrintList(ints4, "ints4");

            // 使用常量定义数组长度,作为数组长度使用的变量必须为常量(有const修饰符)
            const int list_length = 5;
            int[] ints5 = new int[list_length] { 1, 2, 3, 4, 5 }; // 指定数组长度的时候,数组长度必须和实际长度一致
            PrintList(ints5, "ints5");

            // 多维数组,这种方式声明的数组由于是一个固定行和列的数组,所以也被称为矩阵数组
            int[,,] ints6 = new int[2, 2, 3] { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 2, 3, 4 } } };
            
            // 不建议使用foreach遍历多维数组,因为使用foreach会把所有的元素打散
            foreach (int i in ints6)
            {
                Console.WriteLine(i);
            }

            // 使用for循环会更加容易控制多维数组
            for (int i = 0; i < ints6.GetLength(0); i++)
            {
                for (int j = 0; j < ints6.GetLength(1); j++)
                {
                    for (int k = 0; k < ints6.GetLength(2); k++)
                    {
                        Console.WriteLine($"{ints6}的 {i} {j} {k} 值为{ints6[i,j,k]}");
                    }
                }
            }

            // 锯齿数组:多维数组中如果元素的数量不一致,被称为锯齿数组
            // 第一种定义\赋值方法
            int[][] ints7 = new int[2][];
            ints7[0] = new int[1];
            ints7[1] = new int[3];
            ints7[1][1] = 5;

            // 第二种定义\赋值方法
            int[][] ints8 = new int[2][] { new int[] { 1, 2 }, new int[] { 4 ,5,6} };

            // 第三种定义\赋值方法
            int[][] ints9 = { new int[] { 1,2,3}, new int[] { 5,6,7} };

            // 第四种定义\赋值方法;定义三维数组
            int[][][] ints10 = { new int[3][] , new int[2][] , new int[1][] };
            ints10[0][0] = new int[] {1,2,3};
            // ...

            // 几个数组的方法
            // GetEnumerator方法,供foreach方法调用
            Console.WriteLine($"{ints6.GetEnumerator()}");
            // 以字符串形式返回当前实例名称
            Console.WriteLine($"{ints6.ToString()}");
            // 判断数组元素的值是否等于某个值
            Console.WriteLine($"{ints6[0 ,0, 0].Equals(1)}");
            // 判断数组是否等于某个数组
            Console.WriteLine($"{ints6.Equals(ints6)}");
            // 获取数组元素的长度
            Console.WriteLine($"{ints6.Length}");
            // 获取数组的hash
            Console.WriteLine($"{ints6.GetHashCode()}");
            // 获取数组指定维度的元素数
            Console.WriteLine($"{ints6.GetLength(0)}");
            int[] aaa = new int[] { 0, 0, 0 };
            // 获取数组的值,好像没啥用
            Console.WriteLine($"{ints6.GetValue(aaa)}");
            // 获取数组指定维度第一个元素的索引
            Console.WriteLine($"{ints6.GetLowerBound(0)}");
            // 获取当前示例的类型
            Console.WriteLine($"{ints6.GetType()}");
            // 获取数组指定维度最后一个元素的索引
            Console.WriteLine($"{ints6.GetUpperBound(2)}");
            // 获取数组的维数
            Console.WriteLine($"{ints6.Rank}");
            Console.ReadLine();
        }
    }
}

输出:

0
0
0
5
0
0
0
0
0
0
5
5
5
5
列表ints1的第0个元素为1
列表ints1的第1个元素为2
列表ints1的第2个元素为4
列表ints1的第3个元素为5
列表ints2的第0个元素为1
列表ints2的第1个元素为2
列表ints2的第2个元素为3
列表ints2的第3个元素为4
列表ints2的第4个元素为5
列表ints3的第0个元素为1
列表ints3的第1个元素为2
列表ints3的第2个元素为3
列表ints3的第3个元素为4
列表ints3的第4个元素为5
列表ints4的第0个元素为1
列表ints4的第1个元素为2
列表ints4的第2个元素为3
列表ints4的第3个元素为4
列表ints4的第4个元素为5
列表ints5的第0个元素为1
列表ints5的第1个元素为2
列表ints5的第2个元素为3
列表ints5的第3个元素为4
列表ints5的第4个元素为5
1
2
3
4
5
6
7
8
9
2
3
4
System.Int32[,,]的 0 0 0 值为1
System.Int32[,,]的 0 0 1 值为2
System.Int32[,,]的 0 0 2 值为3
System.Int32[,,]的 0 1 0 值为4
System.Int32[,,]的 0 1 1 值为5
System.Int32[,,]的 0 1 2 值为6
System.Int32[,,]的 1 0 0 值为7
System.Int32[,,]的 1 0 1 值为8
System.Int32[,,]的 1 0 2 值为9
System.Int32[,,]的 1 1 0 值为2
System.Int32[,,]的 1 1 1 值为3
System.Int32[,,]的 1 1 2 值为4
System.Array+ArrayEnumerator
System.Int32[,,]
True
True
12
46104728
2
1
0
System.Int32[,,]
2
3
posted on 2023-01-15 00:41  盈盈的月儿  阅读(34)  评论(0编辑  收藏  举报