【问题标题】:Read 2D matrix from file to 2D int array in C#在 C# 中从文件读取二维矩阵到二维 int 数组
【发布时间】:2017-08-23 03:12:45
【问题描述】:

我在从文件中读取 2D 文本并将其导入到 int 数组时遇到问题。具体来说,我的文本文件如下所示:

2,3,4,5,6

5,2,3,4,5

2,4,6,7,4

2,7,8,5,6

因此矩阵中的每个单元格都用逗号分隔,并且每个新行都以新行开头。

我尝试了很多方法让它工作,但我做不到!简单地说,我想要一个 int[][]int[,] 最后的数组。

P.S:我可以简单地将一维矩阵读取到int[],如下所示:

int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray();

【问题讨论】:

    标签: c# arrays matrix int


    【解决方案1】:
    // Read the text file
    var text = File.ReadAllLines(@"path\to\file.txt");
    
    // Split on `,`, convert to int32, add to array, add to outer array
    var result = text.Select(x => (x.Split(',').Select(Int32.Parse).ToArray())).ToArray();
    

    结果是int[][]

    【讨论】:

      【解决方案2】:

      试试这个:

      String input = File.ReadAllText( @"c:\myfile.txt" );
      
      int i = 0, j = 0;
      int[,] res = new int[10, 10];
      foreach (var row in input.Split('\n'))
      {
         j = 0;
         foreach (var col in row.Trim().Split(' '))
         {
             res[i, j] = int.Parse(col.Trim());
             j++;
         }
         i++;
      }
      

      如果该方法有效,您还有其他选择:

      int[][] list = File.ReadAllLines("myfile.txt")
                     .Select(l => l.Split(',').Select(i => int.Parse(i)).ToArray())
                     .ToArray();
      

      【讨论】:

      • 亲爱的 Arvin, 您的替代方法效果很好。谢谢!
      • 我不确定所以试试这个:float[][] list = File.ReadAllLines("myfile.txt") .Select(l => l.Split(',').Select (i => float.Parse(i)).ToArray()) .ToArray();
      【解决方案3】:

      您首先需要将每行的索引添加到第一个维度,然后将行中的每个“列”添加到第二个维度。

      试试下面的代码:

      int[][] array = File.ReadAllText(filepath).Split('\n')
                      .Select(r => (r.Split(','))
                      .Select(c => int.Parse(c)).ToArray()).ToArray();
      

      【讨论】:

        【解决方案4】:

        您正在阅读所有行,但代码只处理一行。如果你想创建一个二维整数数组,你需要这样的东西:

        字符串文本 = @"2,3,4,5,6 5,2,3,4,5 2,4,6,7,4";

        text.Split('\n').Select(line => line.Split(',').Select(t => int.Parse(t)).ToArray()).ToArray();

        (出于测试目的,我将读取的文件替换为静态字符串)

        【讨论】:

        • (我的静态字符串在粘贴到表单时丢失了换行符)
        【解决方案5】:

        为了说明问题,您将每行的引用存储到锯齿状数组 int[][] 或二维数组 int[,]

        建议你在https://msdn.microsoft.com/en-us/library/aa288453%28v=vs.71%29.aspx?f=255&MSPPError=-2147217396之前看看这里

        如果您想创建一个锯齿状数组很简单,第一个维度将是您文件中的行数。记住这个锯齿状数组在每个位置都有数组

        int[][] a = new int[amountOfLinesTxt][];
        

        因为你可以获取每行的数组,所以你唯一需要做的就是将数组分配到特定的位置,例如

        int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray();
        a[0] = array
        

        其他行也一样。

        现在如果你想使用一个二维数组,你需要在你的情况下从乞求维度中指定,例如int[,] a = new int[amountOfRowsTxt, amountofColumnsTxt];

        那么当你阅读你的台词时,你需要保存其中的项目。

        int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray();
        
        for(int i = 0; array.Length; i ++)
        {
           a[currentRow, i] = array[i];
        }
        

        明白了吗?当然有更好的方法来使用 Linq 得到结果,看看前面的答案就知道了。希望这会有所帮助

        【讨论】:

          猜你喜欢
          • 2013-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-13
          • 1970-01-01
          • 2016-08-11
          • 1970-01-01
          相关资源
          最近更新 更多