1. 数组定义

数组是存储相同类型数据的容器数组长度固定不可变。
2. 索引下标规则
索引从 0 开始
数组长度从 1 开始
最大索引 = 数组长度 - 1
3. 底层原理
所有数组都直接或间接继承自 Array 类数组数据顺序连续存储。
4. 数组最大特点重中之重
长度固定一旦创建不可修改
数据在内存中 连续顺序存储
通过 下标/索引 操作元素
所有数组都继承于 Array 类
创建空数组未赋值时系统自动填充默认值
int[] → 默认值0
double[] → 默认值0
bool[] → 默认值false
string[] → 默认值null
char[] → 默认值 空字符
object[] → 默认值null
int[] ages; ages = new int[10]; // 开辟长度为10的空数组
string[] names = new string[5] { "张三", "张三", "张三", "张三", "张三" };
规则定义的长度必须和大括号元素个数一致否则报错。
int[] ages = new int[] { 1, 2, 3 };
int[] nums = { 1, 2, 3 };
string[] msgs = new string[100]; msgs[0] = "张三"; msgs[1] = "搜索";
for (int i = 0; i < msgs.Length; i++)
{
msgs[i] = i + "深度";
}
msgs.Length获取数组总长度只读属性
Console.WriteLine(msgs[99]); // 根据下标取值
for (int i = 0; i < msgs.Length; i++)
{
Console.WriteLine(msgs[i] + "--------");
}
优点可以获取下标i、可以修改数组元素
foreach (string item in msgs)
{
Console.WriteLine(item + "++++");
}
item代表数组中当前遍历的元素等价于 msgs[i]
for功能强大可以获取下标、可以修改元素、灵活
foreach写法简单、代码少
foreach缺点无法获取下标、不能修改原数组元素
普通数组只能存一种类型object数组可以存储任意数据类型。
object[] arr = new object[5] { 1, 2, 3, "张三", true };
foreach (object item in arr)
{
Console.WriteLine(item);
}
缺点取出的数据都是object类型需要强制转换才能运算。
输出数组名Console.WriteLine(arr) → 输出 System.Object[]所有数组直接打印都输出类型名
string[] msgs = new string[100]; msgs[100] = "ss"; // 报错
报错原因长度100下标范围只能是 0~99没有100下标。
口诀下标最大=长度-1
数组固定长度、存同类型、下标从0开始
int默认0、bool默认false、string默认null、char默认
四种数组定义方式长度可指定可自动推断
for可下标可修改foreach简洁不能下标不能改
object数组万能存储但是需要类型转换
禁止下标越界最大下标=长度-1
直接打印数组名输出数组类型名称
查询速度快通过下标直接定位
结构简单、顺序存储
长度固定不可扩容
增删数据效率低
1. 多维数组二维及以上数组统称多维数组是一维数组的扩展用于存储结构化、立体化数据
2. 维度判定万能口诀逗号个数 + 1 = 维度数
int[,] → 1个逗号 → 二维数组行+列表格结构
int[,,] → 2个逗号 → 三维数组块+行+列立体结构
3. 通用特性长度固定、存储同类型数据、下标从0开始、内存连续存储遵循数组核心规则
语法数据类型[维度1,维度2...] 数组名 = new 数据类型[长度1,长度2...];
int[,] arr2 = new int[2, 3]; // 二维2行3列 int[,,] arr3 = new int[2, 3, 4];// 三维2块、3行、4列
根据大括号嵌套层数、元素个数自动识别各维度长度
int[,] ints = new int[,]
{
{1,2,3 },
{4,5,6},
{7,8,9},
};
// 自动识别3行3列
int[,,] ints1 = new int[,,]
{
{ {1,2,3}, {1,2,3} },
{ {1,2,113}, {1,2,339} }
};
// 自动识别2块、2行、3列
所有多维数组通用是遍历、取值的核心依据
Rank获取数组维度数二维返回2三维返回3
Length获取数组总元素个数32位整型
LongLength获取数组总元素个数64位整型适配超大数组
GetLength(n)获取指定维度的长度最常用
二维数组GetLength(0)=行数 、 GetLength(1)=列数
三维数组GetLength(0)=块数 、 GetLength(1)=行数 、 GetLength(2)=列数
所有维度下标从0开始最大下标=维度长度-1
string[,] strings = new string[,]
{
{"孙悟空","猪八戒","沙和尚" },
{"刘备","曹操","孙权" },
{"宋江","林冲","吴用" },
{"贾宝玉","林黛玉","薛宝钗"}
};
Console.WriteLine(strings.Rank); // 2二维数组
Console.WriteLine(strings.Length); // 12总元素数
Console.WriteLine(strings.GetLength(0)); // 4行数
Console.WriteLine(strings.GetLength(1)); // 3列数
二维数组[行下标, 列下标]
三维数组[块下标, 行下标, 列下标]
Console.WriteLine(strings[0, 0]); // 孙悟空 Console.WriteLine(strings[3, 1]); // 林黛玉 Console.WriteLine(ints1[1, 1, 2]); // 339
适用场景需要区分行列、修改元素、精准操作数据
外层循环遍历第一维度行/块内层循环遍历第二、三维度列
// 二维数组双层for遍历
for (int i = 0; i < strings.GetLength(0); i++) // 遍历所有行
{
for (int j = 0; j < strings.GetLength(1); j++) // 遍历当前行所有列
{
Console.Write(strings[i, j] + " ");
}
Console.WriteLine(); // 换行分行展示
}
特性无视所有维度直接平铺遍历数组所有元素
缺点无法获取行列下标、不能修改原数组元素
foreach (var item in strings)
{
Console.WriteLine(item);
}
场景定义空多维数组通过嵌套循环批量赋值
string[,] names = new string[5, 10]; // 5行10列空数组
for (int i = 0; i < names.GetLength(0); i++)
{
for (int j = 0; j < names.GetLength(1); j++)
{
names[i, j] = $"行:{i} 列:{j}";
}
}
Console.WriteLine(names[3, 9]); // 读取指定位置数据
需求初始化二维数组指定 arr[0,3]=10、arr[1,2]=20、arr[2,2]=30其余元素为0
int[,] ints2 = new int[,]
{
{0,0,0,10},
{0,0,20,0 },
{0,0,30,0 }
};
利用随机数生成合法下标随机读取数组元素高频实操考点
string[] xings = {"赵","钱","孙","李","诸葛","夏侯","东方","欧阳"};
string[] names1 = { "亮", "娜娜", "月初", "惇", "匡胤", "多多", "权", "世民" };
Random rnd = new Random();
// 随机生成合法下标0 ~ 数组长度-1
int index1 = rnd.Next(0, xings.Length);
int index2 = rnd.Next(0, names1.Length);
Console.WriteLine(xings[index1] + names1[index2]);
1. 多维数组下标格式[行,列]不能写成 [i][j]和其他语言区别
2. 遍历多维数组禁止用数组名.Length做循环条件必须用 GetLength(维度)
3. 下标越界任意维度下标最大取值 = 该维度长度 - 1
4. foreach遍历多维数组无法区分行列只能读取不能修改
5. 多维数组初始化每行元素个数必须一致否则编译报错
6. 直接打印多维数组名输出系统类型名不会输出元素
维度判定逗号个数+1=维度数
Rank取维度数Length取总元素数GetLength取单维度长度
二维0维是行、1维是列三维0块1行2列
嵌套for可遍历可改值foreach平铺只读无下标
多维下标逗号分隔禁止多括号写法
所有维度下标从0开始最大下标=维度长度-1
交错数组
交错数组也叫锯齿数组大数组里面存放的每一个元素都是一个独立的小数组。
交错数组每一个内层小数组的长度可以不相同长短不一、参差不齐
多维数组每一行/列长度必须完全一致规规矩矩的表格
格式数据类型[][] 数组名
多个中括号每一个中括号代表一层数组
int[][] → 两层交错数组数组套数组
int[][][] → 三层交错数组
// 先定义多个长度不同的一维数组
int[] i1s = new int[4] { 1, 2, 3, 4 }; // 长度4
int[] i2s = new int[] { 1, 2, 3, 4, 5 }; // 长度5
// 外层大数组存放不同长度的小数组
int[][] ints = new int[][]
{
i1s,
i2s,
new int[]{1,2,3,4,5,999} // 长度6
};
核心特征内层数组长度 4、5、6 完全不统一这就是交错数组。
先取出内层数组再取数组内元素
int[] arr = ints[1]; // 取出第2个内层数组i2s int a = arr[4]; // 取出该数组下标4的元素 Console.WriteLine(a);
数组[外层下标][内层下标]
Console.WriteLine(ints[2][5]); // 999
ints[1][2] = 888; // 修改指定外层、内层下标元素
外层循环遍历外层大数组ints.Length
内层循环遍历每一个内层小数组ints[i].Length
⚠ 重点内层长度不能写死必须用 ints[i].Length因为每个数组长度不一样
for (int i = 0; i < ints.Length; i++)
{
Console.WriteLine("当前内层数组长度" + ints[i].Length);
for (int j = 0; j < ints[i].Length; j++)
{
Console.WriteLine($"({i}:{j}={ints[i][j]})");
}
}
外层遍历取出每一个内层数组
内层遍历取出当前数组的每一个元素
foreach (int[] item in ints)
{
foreach (int item1 in item)
{
Console.WriteLine(item1 + "+++++++");
}
}
1. 交错数组是多括号 [][]多维数组是逗号 [,]语法绝对不能混
2. 交错数组最大特点内层数组长度可以不同
3. 遍历交错数组内层必须使用ints[i].Length不能写固定值
4. 取值格式[外层下标][内层下标]不是逗号格式
5. 多维数组是一个整体表格交错数组是数组集合每个元素是独立数组
交错数组数组套数组双层括号[][]长度参差不齐
多维数组逗号[,]规则表格行列长度统一
交错取值双层下标多维取值逗号分隔
交错遍历内层长度随数组变化不能写死
三种数组终极对比总结一维、二维、交错
// 1. 一维数组单组数据
int[] arr1 = new int[3] { 1, 2, 3 };
// 2. 二维多维数组规则表格、长宽统一
int[,] arr2 = new int[,]
{
{1,2,3},
{4,5,6}
};
// 3. 二维交错数组数组套数组、长度随意
int[][] arr3 = new int[][]
{
new int[]{1,2},
new int[]{3,4,5,6}
};
一维数组[]
多维数组[,] 逗号分隔、规则表格
交错数组[][] 多括号嵌套、不规则锯齿
多维数组所有行列长度统一整体表格
交错数组每行长度可以不一样数组嵌套数组
多维[行,列]
交错[外层][内层]
多维数组GetLength(维度)
交错数组外层.Length / 内层[i].Length
1. 数组长度固定不支持扩容
2. 所有下标遵循最大下标 = 长度 - 1禁止越界
3. 一维遍历用 Length多维遍历必须用 GetLength()
4. 多维逗号[,]、交错双括号[][]语法绝对不能混用
5. 交错数组内层长度不统一遍历必须动态获取长度
6. foreach 遍历所有数组都是只读不能修改原数据
7. 直接打印数组名输出类型不输出元素
数组固定长度存同类下标从零起最大长度减一
数值默认0布尔false字符串null字符空
for带下标可改值foreach简洁只读无下标
多维逗号规则表行列长度都统一
交错括号数组套内层长度不统一
多维取值逗号隔交错取值双层括
以上为个人经验希望能给大家一个参考也希望大家多多支持本站。
您可能感兴趣的文章: