< 返回教程列表
1.5 数组
知识介绍
一维数组声明与初始化:
// 方式1:声明后赋值
int[] arr1 = new int[5]; // 长度为5,元素默认值为0
arr1[0] = 10; arr1[1] = 20;
// 方式2:声明时直接初始化(省略长度)
int[] arr2 = { 1, 2, 3, 4, 5 };
// 方式3:完整形式
int[] arr3 = new int[] { 10, 20, 30 };
常用属性和方法:
int[] nums = { 3, 1, 4, 1, 5, 9, 2, 6 };
int len = nums.Length; // 8
Array.Sort(nums); // 排序:[1,1,2,3,4,5,6,9]
Array.Reverse(nums); // 反转:[9,6,5,4,3,2,1,1]
int idx = Array.IndexOf(nums, 5); // 查找元素位置
二维数组:
// 多维数组(矩阵形式)
int[,] matrix = new int[3, 3]
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
Console.WriteLine(matrix[0, 2]); // 3
// 交错数组(数组的数组,每行长度可以不同)
int[][] jagged = new int[2][];
jagged[0] = new int[3] { 1, 2, 3 };
jagged[1] = new int[2] { 4, 5 };
例题
例题1: 找出数组中的最大值及下标。
int[] scores = { 78, 92, 65, 88, 95, 72, 85 };
int max = scores[0];
int maxIndex = 0;
for (int i = 1; i < scores.Length; i++)
{
if (scores[i] > max)
{
max = scores[i];
maxIndex = i;
}
}
Console.WriteLine($"最高分:{max},下标:{maxIndex}");
例题2: 冒泡排序(升序)。
int[] arr = { 5, 3, 8, 1, 9, 2 };
for (int i = 0; i < arr.Length - 1; i++) // 轮数
{
for (int j = 0; j < arr.Length - 1 - i; j++) // 每轮比较
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
Console.WriteLine(string.Join(",", arr)); // 1,2,3,5,8,9
练习题
声明一个长度为10的 int 数组,用
Random填充1-100的随机数,然后求平均值、输出所有大于平均值的元素。输入5个整数存入数组,实现"反转"输出(不使用 Array.Reverse,手动交换)。
有一个已经有序的数组
{2, 5, 8, 13, 21, 34, 55},输入一个数插入到合适位置,保持数组有序。定义一个 3×4 的二维数组,填入随机数,求所有元素的和以及每行的最大值。
数组去重:
{1, 2, 2, 3, 4, 4, 4, 5}→ 输出去重后的元素。