从之前的作业中我们有4个数组:
string[] titles = new string[10];
string[] authors = new string[10];
string[] publishers = new string[10];
string[] dates = new string[10];
在此作业中,我们必须将所有这些转换为单个2D数组。我理解如何声明一个2D数组(例如int[,] items = new int[4, 6];
),但是将4个数组放入一个2D数组中让我完全陷入困境。非常感谢任何帮助。
答案 0 :(得分:3)
如果您需要专门用于学术目的的 2D阵列。请注意,您应该使用锯齿状数组(请参阅最后的注释!)
string[] titles = new string[10];
string[] authors = new string[10];
string[] publishers = new string[10];
string[] dates = new string[10];
string[,] array2D = new string[4, 10];
for (int i = 0; i < 4; i++)
{
string[] myCurrentArray = new string[] { };
switch (i)
{
case 0:
myCurrentArray = titles;
break;
case 1:
myCurrentArray = authors;
break;
case 2:
myCurrentArray = publishers;
break;
case 3:
myCurrentArray = dates;
break;
default:
break;
}
for (int j = 0; j < 10; j++)
{
array2D[i, j] = myCurrentArray[j];
Console.WriteLine("Array [" + i + "][" + j + "]: " + array2D[i, j]);
}
}
简要说明,你要做的就是手动填充你的多维魔法装置。为了检索那些你将要调用的值,这非常慢。最有效的方法是,在你已经拥有数据填充数据的情况下,动态选择这4个数组并循环遍历它们以检索数据并将其插入到2D数组中。
第一个循环遍历所有4个数组,并且为了避免以后重复代码而对它们各自实例,交换机处理它。第二个循环遍历每个数组并检索数据以正确存储它。
我假设您已经知道循环是如何工作的,而且我将明确指出请小心使用阵列绑定。如果您尝试将此代码重用于具有不同大小的数组,则可能会遇到Array out of bounds Exception
,因此请相应地调整代码,如果需要,请使用Array.Length
来循环上限等。
这是你应该做的(使用锯齿状数组):
string[] titles = new string[10];
string[] authors = new string[10];
string[] publishers = new string[10];
string[] dates = new string[10];
string[][] table = new string[][] { titles, authors, publishers, dates };
table
将包含单个变量中的所有4个数组。
请仔细阅读 没有理由在锯齿状数组上使用多维数组,它们速度较慢,它们不接受你已经拥有的对象类型(字符串数组),并会强制你迭代并填充数据一对嵌套的for循环。
请查看此信息,了解有关锯齿状与多维数组的信息并了解其差异:What are the differences between a multidimensional array and an array of arrays in C#?