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