将元素/项添加到多维数据列表

时间:2016-01-08 04:35:25

标签: c# list multidimensional-array

我正在尝试创建一个填充了员工及其信息的多维列表。

  

前:“简史密斯”“经理”“75,000”“达拉斯”

我现在的代码正在给我一个超出范围的例外。 这个bigROW[i].Add(ownName);bigROW[i][j+1] = newElement;给了我错误。

 //Begin making rows
        for (int i = 0; i < fileRowCount; i++ )
        { 
            string findOwners = "";
            findOwners = file5Data.Rows[i][0].ToString();
            if(DISTINCTOppOwners.Contains(findOwners))
            {

                //Find index of where owner is 
                    int useIndex = 0;
                    useIndex = DISTINCTOppOwners.IndexOf(findOwners); 

                 //Add their name to Multidimensional list
                  string ownName = DISTINCTOppOwners[useIndex].ToString();
                    //This line give me the ERROR
                    bigROW[i].Add(ownName);

                for (int j = 0; j < fileColCount; j++)
                { 
                     Add Employee information to Multidimensional list
                    string newElement = file5Data.Rows[i][j].ToString();
                    if(ownName != newElement)
                      {

                        if(j ==0)
                        {
                           //Avoid adding their names to the list twice
                          bigROW[i][j+1] = newElement;
                        }

                        bigROW[i][j] = newElement;
                      }
                    }

                }   
        }

我尝试将信息添加到名为“子列表”的列表中,然后将其添加到BigRow(多维列表)中,但是当我清除子列表以添加新行时,它会删除BigRow中的值。

2 个答案:

答案 0 :(得分:0)

这是一个简单的例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication64
{
    class Program
    {
        static void Main(string[] args)
        {
            string input =
                "0,1,2,3,4,5,6,7,8,9\n" +
                "10,11,12,13,14,15,16,17,18,19\n" +
                "20,21,22,23,24,25,26,27,28,29\n" +
                "30,31,32,33,34,35,36,37,38,39\n" +
                "40,41,42,43,44,45,46,47,48,49\n";

            List<List<int>> output = new List<List<int>>();
            StringReader reader = new StringReader(input);
            string inputline = "";

            while ((inputline = reader.ReadLine()) != null)
            {
                List<int> numbers = inputline.Split(new char[] { ',' }).Select(x => int.Parse(x)).ToList();
                output.Add(numbers);
            }
        }
    }
}

答案 1 :(得分:0)

  

我尝试将信息添加到名为“子列表”的列表中,然后将其添加到BigRow(多维列表)中,但是当我清除子列表以添加新行时,它会删除BigRow中的值。

将对象添加到列表时,存储的是引用,而不是对象的内容。您应该每次都创建一个新的sublist,而不是清除List。否则,您有一个外部列表,其中包含同一列表的多个副本。

有关此示例,请参阅上面的jdweng's answer。在他的代码中,ToList调用会为每一行创建一个新的numbers列表,以便每行都有自己的List个数字。