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] 来添加更多"列",然后复制内容。 也许我没有以最佳/有效的方式做到这一点,所以任何指导将不胜感激,谢谢。
我认为你想要一个二维数组:
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);
我不相信你问的是直接可能的。因为您使用的语法是用于交错数组的,而您正在做的实际上是要求它创建一个多维数组。
语法令人困惑,因为它读起来就像你真正想要的是一个多维数组(尽管我知道事实并非如此。
我不相信由于大小变化,您可以将数组存储在新分配的数组中。您需要构建一个自定义复制方法,将数据移动到更大的数组中。