Visual Studio 2012 - 在 C# 中确定数组数组的大小

本文关键字:数组 2012 Studio Visual | 更新日期: 2023-09-27 17:55:56

我正在创建一个数组数组,这样:

var arrNewArray = new string[arrOldArray.Length][7];
arrOldArray 是一个数组数组,它是 [X][4],这意味着第一个数组或"外部"数组的长度

可以更改,但"内部"数组的长度始终为 4,或容纳 4 个字符串([0][1][2][3])。

为什么编译器不接受我上面的陈述?

从本质上讲,我正在尝试使用 arrOldArray 并扩展它,或者通过将旧数组中的 [4] 增加到新数组中的 [7] 来添加更多"列",然后复制内容。 也许我没有以最佳/有效的方式做到这一点,所以任何指导将不胜感激,谢谢。

Visual Studio 2012 - 在 C# 中确定数组数组的大小

我认为你想要一个二维数组:

var arrNewArray = new string[arrOldArray.Length, 7];

您可以像这样访问它:arrNewArray[x, y] .

这比交错数组更好,因为它清楚地传达了每一行的"列"数是相同的。

如果你想继续使用交错数组,你需要这样做:

var arrNewArray = new string[arrOldArray.Length][];
for(int i = 0; i < arrOldArray.Length; ++i)
    arrNewArray[i] = new string[7];

这种复杂方式的原因是:对于交错数组,每个"行"可以有不同数量的"列"。对于每个"行"具有相同数量的"列"的情况,不存在简写语法。这就是您的代码无法编译的原因。
交错数组是必不可少的数组数组,因此您需要为外部数组的每个"行"创建一个新的数组实例并显式分配它。这就是for循环正在做的事情。

不能将Array.Copy与交错数组一起使用。每个子数组都是它自己的实例,Array.Copy不会进行深层复制,它只是将引用从一个数组复制到另一个数组。其效果是,两个数组将指向相同的项目,并且从一个数组中的项目将从另一个数组中看到。

您没有正确创建交错数组。正确的方法是创建交错数组的第一维,然后遍历第一维的项目以创建嵌套数组并从旧数组复制数据。下面是一个示例:

int newSize = 7;
string[][] newArray = new string[oldArray.Length][];
for (int i = 0; i < oldArray.Length; i++)
{
    newArray[i] = new string[newSize];
    Array.Copy(oldArray[i], newArray[i], oldArray[i].Length);
}

你会想要

var arrNewArray = new string[arrOldArray.Length, 7];
var arrNewArray = new[] {new string[7]};//array of arrays
var arrNewArray = new string[arrOldArray.Length, 7];//two-dimensional array

使用 Linq:

int[][] jaggedArray2 = new int[][] 
{
    new int[] {1,3,5,7,9},
    new int[] {0,2,4,6},
    new int[] {11,22}
};
int length = jaggedArray.Sum(a => a.Length);

我不相信你问的是直接可能的。因为您使用的语法是用于交错数组的,而您正在做的实际上是要求它创建一个多维数组。

语法令人困惑,因为它读起来就像你真正想要的是一个多维数组(尽管我知道事实并非如此。

我不相信由于大小变化,您可以将数组存储在新分配的数组中。您需要构建一个自定义复制方法,将数据移动到更大的数组中。