服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#中多维数组[,]和交错数组[][]的区别

C#中多维数组[,]和交错数组[][]的区别

2022-12-16 13:38yangbin C#

这篇文章介绍了C#中多维数组[,]和交错数组[][]的区别,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

多维数组的声明

在声明时,必须指定数组的长度,格式为 type [lenght ,lenght ,lengh, ... ]

?
1
int [,] test1 = new int [3,3];

或声明时即赋值,由系统推断长度

?
1
2
3
4
5
int [,] test1 = {
            {1,2,3},
            {1,2,3},
            {1,2,3},
        };

交错数组的声明

声明时,至少需要指定第一维的长度,格式为 type [ ] [ ] [ ] ...

?
1
int [][] test1 = new int[5][];
?
1
int [][] test1 = new int[][];    //注意,此的声明方式是错的

或者声明时即赋值,由系统推断长度

?
1
2
3
4
5
int [][] test1 = {
    new int[] {1,2,3,4},
    new int[] {1,2,3},
    new int[] {1,2}
};

多维数组与交错数组 二者的相同、区别

两者声明时,都必须指定长度,多维数组必须指定每一维的长度,而交错数组需要至少需要指定第一维的长度。

多维数组声明时,符号是这样的 [ , , , , ],逗号在 方括号 [ ] 中,每一维长度用逗号分隔。而交错数组每一维独立在 [ ]中

当你想指定数组长度时,只能在等号右侧指定,int [,] test1 = new int [3,3] 是正确的 ;int [6,4] test1 = new int [6,4] 是错误的;

下面以代码形式说明

大小不一致的多维数组会发生错误

?
1
2
3
4
5
int [,] test1 = {
            {1,2,3,4},
            {1,2,3},
            {1,2}
        };         //这样是错的,长度必须一致
?
1
2
3
4
5
int [,] test1 = new int [4,5] {
            {1,2,3,4,5},
            {1,2,3},
            {1,2,3}
        };        //这样也是错误的,长度必须一致,必须为每一个位置赋值

这一点C#与C语言有所区别,C语言可以不全赋值,没有赋值的位置系统默认为0。

下面的方法是正确的

?
1
2
3
4
5
int [,] test1 = {
            {1,2,3},
            {1,2,3},
            {1,2,3}
        };

初始化交错数组

上面已经说了声明一个交错数组的方法

?
1
2
3
4
5
int [][] test1 = {
          new int[] {1,2,3,4},     //new int[4] {1,2,3,4}
          new int[] {1,2,3},      //new int[3] {1,2,3}
          new int[] {1,2}
      };

注意,在里面有new int[],这正是交错数组的特性。

交错数组是由数组构成的数组,交错数组要求为内部的每个数组都创建实例。

即交错数组的每一维都是一个实例,每一个实例为一个数组。

数组的长度是固定的

无论多维数组还是交错数组,长度都是固定的,不能随意改变。

获取数组的长度

使用 对象.Length 获取数组的长度,需要注意的是,多维数组的长度是每一维相乘,即元素总个数。

?
1
2
3
4
5
6
7
       int [,] test1 = {
           {1,2,3},
           {1,2,3},
           {1,2,3}
       };
       Console.WriteLine(test1.Length);
输出为   9

而交错数组的长度则是“内部组成的数组的个数”,例如

?
1
2
3
4
5
6
7
int [][] test1 = {
     new int[] {1,2,3},
     new int[] {1,2,3},
     new int[] {1,2,3},
 };
 Console.WriteLine(test1.Length);
 输出为 3

方法

多维数组、交错数组的方法无差别,都具有Sort()、Clear()等方法,这里不再赘述

下列为System.Array类的属性

C#中多维数组[,]和交错数组[][]的区别

由于系统提供的方法比较多,有兴趣请查阅

https://docs.microsoft.com/zh-cn/dotnet/api/system.array?view=netframework-4.7.2

使用数组初始化类型

在C#中有 lambda、匿名类等等,C# 5.0/6.0 后,给声明类、声明类型类型、赋值等有了很方便的操作方法。下面举例测试。

例子1

使用数组对集合、集合泛型等初始化

声明一个 List 泛型集合

?
1
2
3
4
5
6
7
8
9
using System.Collections.Generic;        //头部引入
 
    //main中的代码
        static void Main(string[] args)
        {
            List<string> list = new List<string>();
 
            Console.ReadKey();
        }

那么,给集合 list 增加一个项,用 Add() 方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
static void Main(string[] args)
{
    List<string> list = new List<string>();
    //增加
    list.Add("a");
    list.Add("b");
    list.Add("c");
    list.Add("d");
    list.Add("e");
    list.Add("f");
    list.Add("g");
    Console.ReadKey();
}

利用 “数组” 来添加新项

?
1
2
3
4
5
List<string> list = new List<string>(){"a","b","c","d","e","f"};
 
List<string> list = new List<string>{"a","b","c","d","e","f"};
 
//以上两种方法都可以,注意后面有没有 ()

例子2

上面的例子利用数组直接在集合声明时初始化,但是不能很好的声明“骚操作”。

试试交错数组

1,在 program类 所在的命名空间中写一个类

?
1
2
3
4
5
6
7
8
9
public class Test
{
    public int x;
    public int y;
    public void What()
    {
        Console.WriteLine(x + y);
    }
}

2,在 Main 方法中

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static void Main(string[] args)
 {
     List<Test> list = new List<Test>()
     {
         new Test{x=1,y=6},
         new Test{x=8,y=6},
         new Test{x=4,y=8},
         new Test{x=5,y=7},
         new Test{x=3,y=3},
         new Test{x=6,y=6},
         new Test{x=9,y=666},
         new Test{x=7,y=6},
     };
     Console.ReadKey();
 }

完整代码如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Test
{
    public int x;
    public int y;
    public void What()
    {
        Console.WriteLine(x + y);
    }
}
class Program
{
    static void Main(string[] args)
    {
        List<Test> list = new List<Test>()
        {
            new Test{x=1,y=6},
            new Test{x=8,y=6},
            new Test{x=4,y=8},
            new Test{x=5,y=7},
            new Test{x=3,y=3},
            new Test{x=6,y=6},
            new Test{x=9,y=666},
            new Test{x=7,y=6},
        };
        Console.ReadKey();
    }
}

由于类引用类型,它的内存是引用地址,不像 int、char等类型,所以在对类(引用类型)使用数组、集合等形式时,可以用 “交错数组” 来理解。

以上所述是小编给大家介绍的C#中多维数组[,]和交错数组[][]的区别,希望对大家有所帮助。在此也非常感谢大家对服务器之家网站的支持!

原文链接:https://www.cnblogs.com/whuanle/p/9936047.html

延伸 · 阅读

精彩推荐
  • C#Unity计时器功能实现示例

    Unity计时器功能实现示例

    计时器在很多地方都可以使用,本文主要介绍了Unity计时器功能实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可...

    小紫苏9872022-12-07
  • C#解决unity3d导入模型贴图材质丢失的问题

    解决unity3d导入模型贴图材质丢失的问题

    这篇文章主要介绍了解决unity3d导入模型贴图材质丢失的问题,具有很好的参考价值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    毛野毛野猫7982022-11-14
  • C#Unity切割图集转换为多张图片

    Unity切割图集转换为多张图片

    这篇文章主要为大家详细介绍了Unity切割图集转换为多张图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    木小星10352022-09-24
  • C#C#如何将Access中以时间段条件查询的数据添加到ListView中

    C#如何将Access中以时间段条件查询的数据添加到ListView中

    这篇文章主要介绍了C# 将Access中以时间段条件查询的数据添加到ListView中,需要的朋友可以参考下...

    东腾10322022-01-17
  • C#C# 拼图魔方小游戏

    C# 拼图魔方小游戏

    这篇文章主要介绍了C# 拼图魔方小游戏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编...

    [Stephen-kzx]9052022-08-28
  • C#c# 获得当前绝对路径的方法(超简单)

    c# 获得当前绝对路径的方法(超简单)

    下面小编就为大家分享一篇c# 获得当前绝对路径的方法(超简单),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    highest7702022-02-19
  • C#C#使用EF连接PGSql数据库的完整步骤

    C#使用EF连接PGSql数据库的完整步骤

    这篇文章主要给大家介绍了关于C#使用EF连接PGSql数据库的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学...

    wnxyz802311022022-03-07
  • C#Unity实现鼠标或者手指点击模型播放动画

    Unity实现鼠标或者手指点击模型播放动画

    这篇文章主要为大家详细介绍了Unity实现鼠标或者手指点击模型播放动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参...

    liang_7049597215142022-08-17