c# 如何实现获取二维数组的列数

二维数组的行数可以使用Length属性获得,但由于C#中支持不规则数组,因此二维数组中每一行中的列数可能不会相同

如何获取二维数组中每一维的列数呢?

答案还是Length属性,因为二维数组的每一维都可以看做一个一维数组,而一维数组的长度是可以使用Length属性获得。

例如,下面代码定义一个不规则二维数组,并通过遍历其行数、列数,输出二维数组中的内容,

代码如下:

  staticvoid Main(string[] args)
  {
  int[][] arr = newint[3][];// 创建二维数组,指定行数,不指定列数
  arr[0] = newint[5];// 第一行分配5个元素
  arr[1] = newint[3];// 第二行分配3个元素
  arr[2] = newint[4];// 第三行分配4个元素
  for(int i=0;i<arr.Length;i++)//遍历行数
      {
  for(int j = 0; j <arr[i].Length; j++)//遍历列数
          {
  Console.Write(arr[i][j]);//输出遍历到的元素
          }
  Console.WriteLine();//换行输出
      }
  Console.ReadLine();
  }

补充:C#中如何获取一个二维数组的两维长度,即行数和列数?以及多维数组各个维度的长度?

如何获取二维数组中的元素个数呢?

int[,] array = new int[,] {{1,2,3},{4,5,6},{7,8,9}};//定义一个3行3列的二维数组
int row = array.Rank;//获取维数,这里指行数
int col = array.GetLength(1);//获取指定维度中的元素个数,这里也就是列数了。(0是第一维,1表示的是第二维)
int col = array.GetUpperBound(0)+1;//获取指定维度的索引上限,在加上一个1就是总数,这里表示二维数组的行数
int num = array.Length;//获取整个二维数组的长度,即所有元的个数

根据上述我们可以自己验证多维数组的形式,使用循环遍历操作数组,例如下面的四维数组:

int[,,,] arr = new int[9, 8, 7, 6];
arr.Rank;//返回4
arr.GetLength(0);//返回9
arr.GetLength(1);//返回8
arr.GetLength(2);//返回7
arr.GetLength(3);//返回6
arr.GetUpperBound(0)+1;//返回9
arr.Length;//返回3024

剩下的循环遍历数组并操作我就不需要解释了吧,自己根据上面的数子进行操作。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • 浅谈C#数组(一)

    目录 一.简单数组之一维数组 1.数组的声明 2.数组的初始化 3.访问数组元素 4.数组中使用引用类型 二.多维数组 三.锯齿数组 四.Array类 1.创建数组 2.复制数组 3.排序 五.数组作为参数 1.数组协变 2.ArraySegment<T> 前言: 如果需要使用同一类型的多个对象,可以使用数组和集合.C#用特殊的记号声明,初始化和使用数组.Array类在后台发挥作用,它为数组中的元素排序和过滤提供了多个方法.使用枚举器,可以迭代数组中的所有元素. 如果需要使用不同类型的多个对象

  • 浅谈C#数组(二)

    目录 一.枚举集合 1.IEnumerator接口 2.foreach语句 3.yield语句 二.元组(Tuple) 三.结构比较 可以先了解上一篇文章内容C#数组(一) 一.枚举集合 在foreach语句中使用枚举,可以迭代集合中的元素,且无需知道集合中元素的个数.foreach语句使用一个枚举器.foreach会调用实现了IEnumerable接口的集合类中的GetEumerator()方法.GetEumerator()方法返回一个实现IEnumerator接口的对象枚举.foreach语

  • c# AES字节数组加密解密流程及代码实现

    AES类时微软MSDN中最常用的加密类,微软官网也有例子,参考链接:https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.aes?view=netframework-4.8 但是这个例子并不好用,限制太多,通用性差,实际使用中,我遇到的更多情况需要是这样: 1.输入一个字节数组,经AES加密后,直接输出加密后的字节数组. 2.输入一个加密后的字节数组,经AES解密后,直接输出原字节数组. 对于我这个十八流

  • C# 数组删除元素的实现示例

    本文主要介绍了C# 数组删除元素的实现示例,具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections; namespace _1207_数组删除元素 { class Program { //只能在动态数组ArrayList类中对数组执行删除元素的操作. //因为动

  • C#如何快速释放内存的大数组详解

    前言 本文告诉大家如何使用 Marshal 做出可以快速释放内存的大数组.最近在做 3D ,需要不断申请一段大内存数组,然后就释放他,但是 C# 对于大内存不是立刻释放,所以就存在一定的性能问题.在博客园看到了一位大神使用 Marshal 做出快速申请的大数组,于是我就学他的方法来弄一个.本文告诉大家这个类是如何使用. 在使用的时候,先来看下原来的 C# 的大数组性能.可以看到在不停gc,性能不好 static void Main(string[] args) { for (int i = 0;

  • C#实现的二维数组排序算法示例

    本文实例讲述了C#实现的二维数组排序算法.分享给大家供大家参考,具体如下: class Order { /// <summary> /// 对二维数组排序 /// </summary> /// <param name="values">排序的二维数组</param> /// <param name="orderColumnsIndexs">排序根据的列的索引号数组</param> /// <

  • C#+无unsafe的非托管大数组示例详解(large unmanaged array in c# without ‘unsafe’ keyword)

    C#申请一个大数组(Use a large array in C#) 在C#里,有时候我需要能够申请一个很大的数组.使用之.然后立即释放其占用的内存. Sometimes I need to allocate a large array, use it and then release its memory space immediately. 由于在C#里提供的 int[] array = new int[1000000]; 这样的数组,其内存释放很难由程序员完全控制,在申请一个大数组后,程序

  • C# 数组中的 indexOf 方法及使用

    具体代码如下所示: var array=['REG','2018','2018']; array.indexOf('REG') // 0 array.indexOf('R') // -1 array.indexOf('2018′) // 1 array.indexOf(2018) // -1 arr.indexOf('orange') 输出 0 因为 'orange' 是数组的第 0 个元素,匹配到并返回下标. arr.indexOf('o') 输出 -1 因为此方法不会在每一个元素的基础上再次

  • 详解c# 数组(Array)

    数组是一个存储相同类型元素的固定大小的顺序集合.数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合. 声明数组变量并不是声明 number0.number1.....number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0].numbers[1].....numbers[99] 来表示一个个单独的变量.数组中某个指定的元素是通过索引来访问的. 所有的数组都是由连续的内存位置组成的.最低的地址对应第一个元素,最高的地址对应最后一个元

  • C# 删除数组内的某个值、一组值方法详解

    最近优化了一个权限校验的功能,之前每次其他系统在获取各自系统的权限配置时,sso都去找到本地对应的权限文件读取解析一次. 这种设计虽然可以实现功能,但是这种反复去读取的策略并不经济,尤其在高并发的情况下更可能会成为性能瓶颈. 于是我对这块业务进行了优化,而在优化的过程中针对如何去除数组内的某些参数试验了一些写法,下面记录我认为比较优雅的写法. 首先讲下场景,设计多系统的权限统一由sso控制,那么每次用户登录其他系统后需要向sso请求"用户在该系统已有的权限"或"该用户当前是否

随机推荐