在C#中将四个数组转换为单个2D数组

时间:2017-11-10 09:25:08

标签: c# arrays string

从之前的作业中我们有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数组中让我完全陷入困境。非常感谢任何帮助。

1 个答案:

答案 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#?