讲解C#中多维数组的长度和范围的特性和使用方法

createh53个月前 (02-01)技术教程27

在 C# 中,多维数组是一种可以包含多个维度(通常是二维或三维)的数组类型。理解其长度和范围的特性有助于正确使用和避免错误。以下是多维数组的长度、范围特性及其使用方法的详细讲解。


1. 多维数组的定义和初始化

定义多维数组

在 C# 中,多维数组是通过 [,] 或其他维度符号定义的。例如:

  • 二维数组:int[,] matrix = new int[3, 4];
  • 三维数组:int[,,] cube = new int[2, 3, 4];

初始化多维数组

多维数组可以在声明时直接初始化:

int[,] matrix = {
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
};

2. 多维数组的长度

Length 属性

  • 定义:Length 属性表示数组中所有元素的总数。
  • 示例
int[,] matrix = new int[3, 4]; // 3 行 4 列,共 12 个元素
Console.WriteLine(matrix.Length); // 输出: 12

GetLength 方法

  • 定义:GetLength(dimension) 返回指定维度的长度。
  • 示例
int[,] matrix = new int[3, 4];
Console.WriteLine(matrix.GetLength(0)); // 输出: 3 (行数)
Console.WriteLine(matrix.GetLength(1)); // 输出: 4 (列数)

3. 多维数组的范围

GetLowerBound 和 GetUpperBound 方法

  • 定义:GetLowerBound(dimension):返回指定维度的起始索引。GetUpperBound(dimension):返回指定维度的结束索引。
  • 注意:在 C# 中,数组的索引通常从 0 开始。
  • 示例
int[,] matrix = new int[3, 4];
Console.WriteLine(matrix.GetLowerBound(0)); // 输出: 0 (行的起始索引)
Console.WriteLine(matrix.GetUpperBound(0)); // 输出: 2 (行的结束索引)
Console.WriteLine(matrix.GetLowerBound(1)); // 输出: 0 (列的起始索引)
Console.WriteLine(matrix.GetUpperBound(1)); // 输出: 3 (列的结束索引)

4. 多维数组的访问和遍历

访问单个元素

使用逗号分隔的索引访问指定位置的元素:

int[,] matrix = {
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
};
Console.WriteLine(matrix[1, 2]); // 输出: 6

遍历多维数组

可以使用嵌套循环遍历所有元素:

int[,] matrix = {
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
};

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. 多维数组的特点

  • 固定大小:多维数组在声明时确定其大小,无法动态调整。
  • 高维支持:C# 支持二维及更高维的数组,但通常使用不超过三维。
  • 性能优化:多维数组在内存中是连续存储的,性能比使用嵌套数组(如 int[][])稍高。

6. 实用示例

矩阵转置

将二维数组的行列互换:

int[,] matrix = {
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
};

int[,] transposed = new int[matrix.GetLength(1), matrix.GetLength(0)];

for (int i = 0; i < matrix.GetLength(0); i++)
{
    for (int j = 0; j < matrix.GetLength(1); j++)
    {
        transposed[j, i] = matrix[i, j];
    }
}

for (int i = 0; i < transposed.GetLength(0); i++)
{
    for (int j = 0; j < transposed.GetLength(1); j++)
    {
        Console.Write(transposed[i, j] + " ");
    }
    Console.WriteLine();
}

查找最大值

查找二维数组中的最大值:

int[,] matrix = {
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 }
};

int max = int.MinValue;

for (int i = 0; i < matrix.GetLength(0); i++)
{
    for (int j = 0; j < matrix.GetLength(1); j++)
    {
        if (matrix[i, j] > max)
        {
            max = matrix[i, j];
        }
    }
}

Console.WriteLine("最大值: " + max); // 输出: 最大值: 9

7. 多维数组与其他语言的比较

特性

C#

Python

Java

起始索引

0

0

0

多维数组声明

固定维度,int[,]

嵌套列表实现

固定维度,int[][]

内存布局

连续内存

非连续(列表)

引用(非连续)

边界检查

自动

自动

自动


总结

多维数组是 C# 提供的强大工具,适用于处理矩阵、图形数据等场景。理解其长度和范围的特性,有助于编写高效、安全的代码。在实际应用中,需要权衡多维数组的使用与动态结构(如 List<List<int>>)的灵活性,选择适合特定需求的方式。

相关文章

二十、Java数组(java数组的使用)

数组的基本概念数组是一种可以存储多个相同类型数据的数据结构,这些数据在内存中是连续存储的。数组中的每个数据项称为数组的元素,每个元素都可以通过索引来访问。Java中的数组属于对象类型,数组中的可以是基...

【每日一学】Java数据流大揭秘:高效处理字节级别的数据传输

学习总目标本次学习目标6 转换流6.1 字符编码和字符集1、编码与解码计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。按照某种规则...

全新Java入门到架构师教程之Java15数组案例实现和Arrays

上篇文章写了《全新Java入门到架构师课程之Java15编程基础-数组(1):数组声明、初始化、数组元素的界限和遍历》,这次将接下去说java15编程之数组案例实现和Arrays一、数组基本练习//A...

趣味玩转数组:Java中的数组遍历技巧

当涉及到Java语言中的数组遍历和操作,我们可以从基本概念开始,逐步深入,以确保您理解得更全面。我们将覆盖以下主题:数组的基本概念声明和初始化数组数组的遍历常见的数组操作让我们一步一步来讲解这些内容:...

java互联网架构师,教你学java基本的程序设计结构:大数值+数组

大数值如果基本的整数和浮点数精度不能满足需求,就可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。这两个类可以处理任意长度的数值。BigInteger类实现了...

Java 如何在 Array 和 List 之间进行转换

概述在本文章中,我们对如何在 Java 中对 Array 和 List 进行转换进行一些说明和示例。这些示例通过使用 Core Java 和一些第三方的转换工具,例如 Guava 和 Apache C...