4

我有一个表格(在文件中),我按空格将其分成块。

我需要这样的结构:

-----------------------------
|21|22|23|33|3323|
|32|32|
|434433|545454|5454|
------------------------------

它更像是每一行都是它自己的表。我该怎么做?

我试过了List<List<string>> matrix = new List<List<string>>();但我似乎找不到使用它的方法。

编辑- 有人可以告诉我这段代码有什么问题吗????Matrix[0][0] 与 matrix [1][0] 相同。似乎同一行一直添加到矩阵中,但我清除了它...

static ArrayList ReadFromFile(string filename)
    StreamReader SR;
    string S;
    string[] S_split;

    SR = File.OpenText(filename);
    S = SR.ReadLine();

    ArrayList myItems = new ArrayList();

    List<List<string>> matrix = new List<List<string>>();
    List<string> row = new List<string>();

    while (S != null)
    {
        row.Clear();
        S_split = S.Split(' ');
        for (int i = 1; i < S_split.GetLength(0); i++)
        {
            row.Add(S_split[i]);
            matrix.Add(row);
        }              

        S = SR.ReadLine();
    }
    Console.WriteLine(matrix[1][1]);
    SR.Close();
    return myItems;
}
4

5 回答 5

7

不确定我是否理解正确。

        List<List<int>> table = new List<List<int>>();
        List<int> row = new List<int>();
        row.Add(21);
        row.Add(22);
        row.Add(23);
        row.Add(33); // and so on
        table.Add(row);

        row = new List<int>();
        row.Add(1001);
        row.Add(1002);
        table.Add(row);

        MessageBox.Show(table[0][3].ToString());

程序应该显示一个带有文本“33”的消息框。

于 2009-04-06T09:35:34.020 回答
1

您应该能够像处理列表中的列表一样使用它。

matrix.Add(new List<string>);
matrix[0].Add("a string");
于 2009-04-06T09:31:30.787 回答
1
List<List<String>> matrix = new List<List<String>>();

foreach (String line in file)
{
   String[] values = line.Split(new Char[] { ' ' });

   matrix.Add(new List<String>(values));
}

只需遍历您的文件,并为每一行执行以下操作。

  1. 生成新列表
  2. 用该行的数据填充它
  3. 将当前行的列表添加到完整文件的列表中

请注意,这foreach (String line in file)只是伪代码。此外,您可以将正文中的 to 行合并为一行。

matrix.Add(new List<String>(line.Split(new Char[] { ' ' })));
于 2009-04-06T09:34:44.880 回答
1

您正在描述一个锯齿状数组。我不完全确定 List 是否不会矫枉过正?如果您只需要从文件中导入数据而不是使用它,那么锯齿状数组应该足够简单。

例子:

int[][] jaggedArray = new int[][] 
{
    new int[] {21, 22, 23, 33, 3323},
    new int[] {32, 32},
    new int[] {434433, 545454, 5454}
};

您还可以在处理文件时循环构建锯齿状数组,如下所示:

int[][] result = new int[numberOfLines][];
for (int currentLine = 0; currentLine < numberOfLines; currentLine++)
{
    String line = fileStream.ReadLine();
    int[] values = SplitAndConvertLine(line);
    result[currentLine] = values;
}
于 2009-04-06T09:38:26.307 回答
0

如果您尝试从文件中读取,请尝试以下操作(注意以下代码尚未通过编译器运行)

List<string[]> matrix = new List<string[]>();
while(!instream.EndOfStream)
{
    var values = instream.ReadLine().Split(new[] {' '});
    matrix.Add(values);
}
于 2009-04-06T09:39:59.597 回答