【C#基础知识 13】5. 数组 -- 5.2 多维数组

C#基础知识 5:数组

5.2 多维数组

多维数组 是一种存储在连续内存位置的相同类型元素的集合,但这些元素按多个维度组织。常见的多维数组包括二维数组、三维数组等。以下是关于多维数组的详细讲解,包括其优点、缺点以及代码示例。

5.2.1 多维数组的基本概念

多维数组 是存储在连续内存位置的相同类型元素的集合,但这些元素按多个维度组织。常见的多维数组包括二维数组、三维数组等。

示例:


csharp

int[,] matrix = new int[2, 3]; // 声明一个2行3列的二维数组
matrix[0, 0] = 1;             // 设置第一个元素
matrix[0, 1] = 2;             // 设置第二个元素
// ...
Console.WriteLine(matrix[0, 0]); // 输出第一个元素
5.2.2 多维数组的声明和初始化

声明二维数组


csharp

int[,] matrix; // 声明一个二维整数数组

初始化二维数组


csharp

int[,] matrix = new int[2, 3]; // 声明并初始化一个2行3列的二维数组

使用数组初始化器


csharp

int[,] matrix = { { 1, 2, 3 }, { 4, 5, 6 } }; // 声明并初始化二维数组

示例:


csharp

using System;

class Program
{
    static void Main(string[] args)
    {
        // 声明并初始化二维数组
        int[,] matrix = new int[2, 3];
        matrix[0, 0] = 1;
        matrix[0, 1] = 2;
        matrix[0, 2] = 3;
        matrix[1, 0] = 4;
        matrix[1, 1] = 5;
        matrix[1, 2] = 6;

        // 使用数组初始化器
        int[,] matrix2 = { { 1, 2, 3 }, { 4, 5, 6 } };

        // 访问数组元素
        Console.WriteLine(matrix[0, 0]); // 输出: 1
        Console.WriteLine(matrix2[1, 2]); // 输出: 6
    }
}
5.2.3 多维数组的优点
  1. 组织数据

    • 多维数组可以按多个维度组织数据,适合表示矩阵、表格等结构。
    • 提高数据的组织性和可读性。
  2. 快速访问

    • 多维数组元素通过索引访问,访问速度非常快。
    • 时间复杂度为 O(1)。
  3. 内存效率

    • 多维数组存储在连续的内存位置,内存使用效率高。
    • 适合存储大量相同类型的元素。
  4. 内置方法

    • 多维数组提供了许多内置方法,如 LengthGetLengthCopySort 等。
    • 提高了数组操作的便利性。
  5. 简化代码

    • 多维数组可以简化处理矩阵和表格数据的代码。
    • 例如,矩阵运算、数据表操作等。
5.2.4 多维数组的缺点
  1. 固定大小

    • 多维数组的大小在创建时确定,不能动态调整。
    • 如果需要动态调整大小,需要创建新的数组并复制元素。
  2. 内存浪费

    • 如果多维数组大小设置过大,可能会导致内存浪费。
    • 如果多维数组大小设置过小,可能会频繁调整大小。
  3. 插入和删除

    • 插入和删除元素需要移动其他元素,性能较差。
    • 时间复杂度为 O(n)。
  4. 类型固定

    • 多维数组中的所有元素必须是相同类型。
    • 不能存储不同类型的数据。
  5. 复杂性增加

    • 对于复杂的操作,多维数组可能需要额外的代码来实现。
    • 例如,排序、查找等操作需要手动实现或使用内置方法。
5.2.5 多维数组的代码示例

以下是一些详细的代码示例,展示了如何声明、初始化和操作多维数组。

示例1:声明和初始化二维数组

文件1:Program.cs


csharp

using System;

class Program
{
    static void Main(string[] args)
    {
        // 声明并初始化二维数组
        int[,] matrix = new int[2, 3];
        matrix[0, 0] = 1;
        matrix[0, 1] = 2;
        matrix[0, 2] = 3;
        matrix[1, 0] = 4;
        matrix[1, 1] = 5;
        matrix[1, 2] = 6;

        // 使用数组初始化器
        int[,] matrix2 = { { 1, 2, 3 }, { 4, 5, 6 } };

        // 访问数组元素
        Console.WriteLine(matrix[0, 0]); // 输出: 1
        Console.WriteLine(matrix2[1, 2]); // 输出: 6
    }
}
示例2:遍历二维数组

文件1:Program.cs


csharp

using System;

class Program
{
    static void Main(string[] args)
    {
        int[,] matrix = { { 1, 2, 3 }, { 4, 5, 6 } };

        // 使用嵌套 for 循环遍历二维数组
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            for (int j = 0; j < matrix.GetLength(1); j++)
            {
                Console.Write(matrix[i, j] + " ");
            }
            Console.WriteLine();
        }

        // 使用 foreach 循环遍历二维数组(不推荐,因为 foreach 不能直接获取索引)
        foreach (int element in matrix)
        {
            Console.Write(element + " ");
        }
    }
}
示例3:获取数组维度和长度

文件1:Program.cs


csharp

using System;

class Program
{
    static void Main(string[] args)
    {
        int[,] matrix = { { 1, 2, 3 }, { 4, 5, 6 } };

        // 获取数组的维度
        int rows = matrix.GetLength(0);
        int columns = matrix.GetLength(1);
        Console.WriteLine($"Rows: {rows}, Columns: {columns}"); // 输出: Rows: 2, Columns: 3

        // 获取数组的总长度
        int totalLength = matrix.Length;
        Console.WriteLine($"Total Length: {totalLength}"); // 输出: Total Length: 6
    }
}
示例4:二维数组排序

文件1:Program.cs


csharp

using System;

class Program
{
    static void Main(string[] args)
    {
        int[,] matrix = { { 5, 3, 8 }, { 1, 2, 4 } };

        // 将二维数组转换为一维数组
        int[] flatArray = new int[matrix.GetLength(0) * matrix.GetLength(1)];
        int index = 0;
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            for (int j = 0; j < matrix.GetLength(1); j++)
            {
                flatArray[index++] = matrix[i, j];
            }
        }

        // 排序一维数组
        Array.Sort(flatArray);

        // 将排序后的一维数组转换回二维数组
        index = 0;
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            for (int j = 0; j < matrix.GetLength(1); j++)
            {
                matrix[i, j] = flatArray[index++];
            }
        }

        // 输出排序后的二维数组
        Console.WriteLine("Sorted matrix:");
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            for (int j = 0; j < matrix.GetLength(1); j++)
            {
                Console.Write(matrix[i, j] + " ");
            }
            Console.WriteLine();
        }
    }
}
示例5:二维数组复制

文件1:Program.cs


csharp

using System;

class Program
{
    static void Main(string[] args)
    {
        int[,] sourceMatrix = { { 1, 2, 3 }, { 4, 5, 6 } };
        int[,] destinationMatrix = new int[sourceMatrix.GetLength(0), sourceMatrix.GetLength(1)];

        // 复制二维数组
        for (int i = 0; i < sourceMatrix.GetLength(0); i++)
        {
            for (int j = 0; j < sourceMatrix.GetLength(1); j++)
            {
                destinationMatrix[i, j] = sourceMatrix[i, j];
            }
        }

        // 输出复制后的二维数组
        Console.WriteLine("Copied matrix:");
        for (int i = 0; i < destinationMatrix.GetLength(0); i++)
        {
            for (int j = 0; j < destinationMatrix.GetLength(1); j++)
            {
                Console.Write(destinationMatrix[i, j] + " ");
            }
            Console.WriteLine();
        }
    }
}
示例6:三维数组

文件1:Program.cs


csharp

using System;

class Program
{
    static void Main(string[] args)
    {
        // 声明并初始化三维数组
        int[,,] cube = new int[2, 2, 3];
        cube[0, 0, 0] = 1;
        cube[0, 0, 1] = 2;
        cube[0, 0, 2] = 3;
        cube[0, 1, 0] = 4;
        cube[0, 1, 1] = 5;
        cube[0, 1, 2] = 6;
        cube[1, 0, 0] = 7;
        cube[1, 0, 1] = 8;
        cube[1, 0, 2] = 9;
        cube[1, 1, 0] = 10;
        cube[1, 1, 1] = 11;
        cube[1, 1, 2] = 12;

        // 使用数组初始化器
        int[,,] cube2 = { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } };

        // 访问数组元素
        Console.WriteLine(cube[0, 0, 0]); // 输出: 1
        Console.WriteLine(cube2[1, 1, 2]); // 输出: 12
    }
}
示例7:遍历三维数组

文件1:Program.cs


csharp

using System;

class Program
{
    static void Main(string[] args)
    {
        int[,,] cube = { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } };

        // 使用嵌套 for 循环遍历三维数组
        for (int i = 0; i < cube.GetLength(0); i++)
        {
            for (int j = 0; j < cube.GetLength(1); j++)
            {
                for (int k = 0; k < cube.GetLength(2); k++)
                {
                    Console.Write(cube[i, j, k] + " ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }
    }
}

通过以上详细讲解和代码示例,您可以更好地理解和使用C#中的多维数组。多维数组是存储和操作按多个维度组织的数据的重要数据结构,提供了快速访问和内存效率高的优点,但需要注意其固定大小和插入删除操作的性能开销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路飞VS草帽

感谢支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值