C#中的string[][]和string[,]有啥区别[重复]

Posted

技术标签:

【中文标题】C#中的string[][]和string[,]有啥区别[重复]【英文标题】:What is the difference between string[][] and string[,] in C# [duplicate]C#中的string[][]和string[,]有什么区别[重复] 【发布时间】:2016-05-17 02:00:49 【问题描述】:

语法略有不同,但它们之间有什么区别。

public static string[][] str1 =  new string[]  Total, "N2" ;
public static string[,] str2 =   Total, "N2"  ; 

每个的使用指南是什么?

【问题讨论】:

第一个是“锯齿状”——一个数组引用数组。 看看这个answer。 【参考方案1】:

看看这里: https://msdn.microsoft.com/en-us/library/2s05feca.aspx

基本上,区别在于内存的分配方式。 [,] 符号将在一个块中分配所有需要的内存,而 [][] 符号将分配一个指向数组的指针数组,其中每个数组是单独分配的,不一定与其他数组相邻

【讨论】:

同时检查Arrays “数组的指针数组” - 这取决于它的使用方式 - 元素可能是unitialised。此外,在 c# 中,术语“指针”并不常用,也不应该是 reference 的同义词。 "A jagged array is an array of arrays, and therefore its elements are reference types and are initialized to null"【参考方案2】:

在你引用的例子中:

public static string[][] str1 =  new string[]  Total, "N2" ;
public static string[,] str2 =   Total, "N2"  ;

第一个是数组数组(Jagged Array)。每个条目都可以指向一个字符串数组。

第二个是普通的二维数组(多维数组)。

【讨论】:

【参考方案3】:

简而言之,[,] 是一个一次性分配的二维数组,而 [][] 是一个数组数组,因此内存分配是渐进的——初始化语法(如您所指出的)也不同。

另一个重要的区别是,在 [][] 类型中,您可以定义不同大小的每个“行”。在 [,] 中无法做到这一点,这在某种程度上是矩阵的 C# 表示。

【讨论】:

以上是关于C#中的string[][]和string[,]有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C#中的String和StringBuilder

C#中的String和StringBuilder

C#中string和String的区别

C#中的string驻留池

用 C# 计算 List<string> 中的范围之间有多少个数字

C#中string()和ToString()有啥区别?