1.一维数组

//数组:存储相同类型的数据的容器,并且数组是有大小的,操作数组时候都是通过索引值进行操作
//这个索引值也可以称为下标,索引值从0开始,长度从1开始,最大的索引值=长度-1,并且数组都是顺序的
//数组都是基于Array的

//定义数组:数据类型[] 变量名;
//变量名一般在后面加s 例如names ages等
int[] ages;//定义整型数组,默认值为0
bool[] sexs;//定义布尔数组,默认值为false
string[] names;//定义字符串数组,默认值null
char[] chars;//定义字符数组,默认值是\0

//赋值
ages = new int[5];//赋值长度为10空数组
sexs = new bool[10];

//赋值的其他方式
names = new string[5] {"清清", "清清", "清清", "清清", "清清"};//赋值的时候指定长度和初始化元素
ages = new int[] { 1, 2, 3, 4, 5 };//不指定长度 长度由元素个数确定
int[] num = { 1, 2, 3 };//字面量定义数组


string[] msgs = new string[10];
//修改数组里面对应位置的元素
msgs[0] = "清清";
msgs[1] = "皖皖";
msgs[2] = "紫幻";
msgs[3] = "道崽";
msgs[4] = "信";
//msg[5] = "ll";//索引超出了数组界限

//添加多个数据
for (int i = 0; i < msgs.Length; i++)//msgs.Length 数组长度的属性
{
    msgs[i] = i + "狼队";//给数组每一个元素进行赋值
}

//取出一个数组元素,通过下标取出元素
Console.WriteLine(msgs[1]);

//取出多个元素,使用for循环遍历
for (int i = 0; i < msgs.Length; i++)
{
    Console.WriteLine(msgs[i]+"----");
}

//使用foreach进行遍历 item = msgs[i]
//item 每一个元素
foreach (string item in msgs)
{
    Console.WriteLine(item+"+++");
}

//for和foreach的区别
//foreach 简单  缺点:不能通过i访问元素,不能访问元素所在的位置

//数组存储不同类型的(了解的,以后想存储不同类型的数据一般使用ArrayList)
//定义一个对象类型的数据
object[] arr = new object[5] {1,2,3,4,"张三"};
//Console.WriteLine(arr[0]+10);//arr[0] 是object类型,把object类型转成整型的

foreach (var item in arr)
{
    Console.WriteLine(item);
}
Console.WriteLine(arr);//System.Object[]

2.多维数组

//c#数组可以定义成一维数组 也可以定义成多维数组,

//1.定义二维数组可以理解为几行几列
//int[,] ints = new int[2,3];

//2.定义二维数组,不用指定维度的长度,按照数据自动推导
int[,] ints = new int[,]
{
    { 1, 2 ,3},
    { 4, 5, 6},
    { 7, 8, 9},
};


//3.定义一个三维数组分为1维空间 2维空间 3维空间
int[,,] ints1 = new int[2,3,4];

//4.定义多维数组
//int[n - 1个逗号] = new int[每个维度的长度];

//定义一个三维数组的不带长度的定义方式
int[,,] ints2 = new int[,,]
{
    {
        {
            1, 2,3
        }
    },
    {
        {
            1,2,3
        }
    },
};

//定义二维的字符串数组
string[,] strings = new string[,]
{
    {"清清","皖皖","紫幻" },
    {"道崽","信","sk" },
    {"梓墨","暖阳","听悦" },
    {"小麦","玖欣","老林" },
};
//
Console.WriteLine(strings.Length);//32位总长度12
Console.WriteLine(strings.LongLength);//64位总长度12
Console.WriteLine(strings.Rank);//2 维度数

Console.WriteLine(strings.GetLength(0));//4 对应维度的长度
Console.WriteLine(strings.GetLength(1));//3 对应二维维度的长度 

//取出指定位置的元素  多维数组[每个维度的索引]
Console.WriteLine(strings[0,0]);//清清
Console.WriteLine(strings[0,1]);//皖皖
strings[3, 0] = "昭珏";//修改指定位置的数据
Console.WriteLine(strings[3,0]);

//for循环进行取出所有值
for (int i = 0; i < strings.GetLength(0); i++)//遍历一维数组 相当于行 4
{
    for (global::System.Int32 j = 0; j < strings.GetLength(1); j++)//遍历二维数组 相当于列  3
    {
        Console.Write(strings[i,j]); //i = 0 ,j= 0 1 2
    }
    Console.WriteLine(" ");
}

//使用foreach进行遍历
foreach (var item in strings)
{
    Console.WriteLine(item+"----");
}

//通过for循环添加
string[,] names = new string[5, 10];//初始化的时候不指定数据的元素

for (int i = 0; i < names.GetLength(0); i++)
{
    for (global::System.Int32 j = 0; j < names.GetLength(1); j++)
    {
        names[i, j] = $"行:{i} 列:{j}";//动态修改数组数据
    }
}
Console.WriteLine(names[3,9]);//行:3 列:9

foreach (var item in names)
{
    Console.WriteLine(item+"===");
}

//练习:定义一个二维数组 叫做arr3
//arr3[0,3] ===> 10
//arr3[1,2] ===> 20
//arr3[2,2] ===> 30

int[,] ints3 = new int[, ]
{
    {0,0,0,10 },
    {0,0,20,0 },
    {0,0,30,0 }
};

//随机昵称
string[] xings = { "", "", "", "", "", "" };//姓
string[] names1 = {"","","","","","","" };
Random rnd = new Random();
int index = rnd.Next(0,xings.Length);
int jndex1 = rnd.Next(0,names1.Length);
Console.WriteLine(xings[index] + names1[jndex1]);

3.交错数组

            //交错数组:大数组包含小数组,也就是数组里面的元素还是数组
            //交错数组和多维数组的区别:交错数组每一个长度都可以不同,多维数组每一个维度长度都必须相同
            int[] i1s = new int[4] { 1, 2, 3, 4 };//一维数组
            int[] i2s = new int[5] { 1, 2, 3, 4, 5 };//一维数组

            //两层交错数组 int[][] 变量 =new int[][]{}初始化

            int[][] ints = new int[][]
            {
                i1s,//长度4
                i2s,//长度5
                new int[]{1,2,3,4,5,999}//长度6
            };
            //取元素值(分开取值)
            int[] arr = ints[1];//i2s这个数组
            int a = arr[4];//再从arr数组取出对应值
            Console.WriteLine(a);
            //一句话取值
            Console.WriteLine(ints[2][5]);//999
            ints[1][2] = 888;//修改指定位置元素

            //for循环进行取值
            for (int i = 0; i < ints.Length; i++)//遍历最外层数组,长度3
            {
                Console.WriteLine(ints[i].Length+"sssss");//每个小数组的长度
                //ints[i]//最外层数组的每一个元素,又是数组,再次遍历每一个数组
                for (global::System.Int32 j = 0; j < ints[i].Length; j++)
                {
                    Console.WriteLine($"({i}:{j}={ints[i][j]})");//i=0 j=0 1 2 3;i=1 j=0 1 2 3 4;i=2 j== 1 2 3 4 5

                }
            }

            //foreach遍历
            foreach (var item in ints)//遍历外层的数组 item又是一个数组
            {
                foreach (var item1 in item)//再次遍历内层每个数组
                {
                    Console.WriteLine(item1+"+++");
                }
            }


        }
    }
}

//1.一维数组定义
//int[] is = new int[3] {1,2,3}

//2.二维数组
//int[,] is = new int[,]
//{
//    {1,2,3 }
//    {4,5,6 }
//};

//3.交错数组 二层交错数组
//int[][] is = new int[][] { new int[] { 1, 2 }, new int[] { 3, 4 } };

4.存储引用类型

        static void Main(string[] args)
        {
            //数组是引用类型
            int[] arr = new int[] { 1, 2, 3 };
            int[] arr2 = arr;//赋值
            arr[0] = 999;
            Console.WriteLine(arr2[0]);

            //存储10个对象类型
            //数组类型定义:数组类型[] 变量名 = new 数组类型[长度];
            People[] pls = new People[10];
            for (int i = 0; i < pls.Length; i++)
            {
                People p1 = new People() { Name = "学生" + i };//构建对象给属性赋值

                //添加到数组里面
                pls[i] = p1;
            }
            //验证 遍历
            foreach (People p in pls)//pls数组存储的是People类型
            {
                Console.WriteLine(p.Name+"===");
            }
            Console.WriteLine(string.Join("-",arr));//99-2-3 按照分隔符 进行分割数组里面元素

        }
    }
    public class People
    {
        public string Name {  get; set; }
    }
}

更多推荐