Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串转换为多维数组_C#_Arrays_Multidimensional Array - Fatal编程技术网

C# 将字符串转换为多维数组

C# 将字符串转换为多维数组,c#,arrays,multidimensional-array,C#,Arrays,Multidimensional Array,我有一个矩阵,它是从控制台读取的。元素由空格和新线分隔。如何将其转换为c#中的多维整数数组?我试过: String[][] matrix = (Console.ReadLine()).Split( '\n' ).Select( t => t.Split( ' ' ) ).ToArray(); 但是,当我单击enter时,程序结束,它不允许我输入更多行 例如: 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 首先,Console.R

我有一个矩阵,它是从控制台读取的。元素由空格和新线分隔。如何将其转换为c#中的多维整数数组?我试过:

String[][] matrix = (Console.ReadLine()).Split( '\n' ).Select( t => t.Split( ' ' ) ).ToArray();
但是,当我单击enter时,程序结束,它不允许我输入更多行

例如:

1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9  

首先,
Console.ReadLine()
从输入中读取一行。因此,为了接受多行,您需要做两件事:

  • 有一个允许用户继续输入数据行的循环。你可以让他们离开,直到他们留下一行空白,或者你可以把它改为5行输入
  • 存储这些“行”数据以备将来处理
  • 假设用户可以输入任意数量的行,并且一个空行(只要按enter键)表示数据输入结束,这样就足够了

    List<string> inputs = new List<string>();
    var endInput = false;
    while(!endInput)
    {
       var currentInput = Console.ReadLine();
       if(String.IsNullOrWhitespace(currentInput))
       {
           endInput = true;
       }
       else
       {
            inputs.Add(currentInput);
       }
    }
    
    // when code continues here you have all the user's input in separate entries in "inputs"
    
    这将为您提供一个字符串数组(您的示例就是这样)。如果您希望这些是整数,可以边走边解析:

    var result = inputs.Select(i => i.Split(' ').Select(v => int.Parse(v)).ToArray()).ToArray();
    

    这可以通过多种方式实现

    您可以读取包含多个数字的单行,这些数字由一个字符分隔,由该字符分割,获得一个整数数组,然后您应该获取一个矩阵

    对于开箱即用的linq,获取步骤没有简单的方法,我认为使用来自codeplex的第三方库(如LinqLib或其他东西)并不是真正的情况。

    int[,]Matrix=new int[n_行,n_列];
    
    int[,] Matrix = new int[n_rows,n_columns];
    
    
        for(int i=0;i<n_rows;i++){
            String input=Console.ReadLine();
            String[] inputs=input.Split(' ');
            for(int j=0;j<n_columns;j++){
                Matrix[i,j]=Convert.ToInt32(inputs[j]);
            }
        }
    

    对于(int i=0;i这是什么语言(将它添加到标记中)?您也只阅读了一行。也许我离开控制台应用程序太久了,但是您如何在
    控制台中接受
    \n
    。ReadLine
    ?读取不是在
    \n
    ?@bradcristie-通过接受多个
    控制台。ReadLine()
    “在loop@Jamiec:或者,答案是:“您无法通过读线接受”。问题是关于如何从控制台输入矩阵,或者如何将
    字符串
    数组转换为
    int
    数组?请澄清您的问题。
    // incoming single-string matrix:
    String input = @"1 2 3 4 5
    2 3 4 5 6
    3 4 5 6 7
    4 5 6 7 8
    5 6 7 8 9";
    
    // processing:
    String[][] result = input
        // Divide in to rows by \n or \r (but remove empty entries)
        .Split(new[]{ '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries)
        // no divide each row into columns based on spaces
        .Select(x => x.Split(new[]{ ' ' }, StringSplitOptions.RemoveEmptyEntries))
        // case from IEnumerable<String[]> to String[][]
        .ToArray();
    
    String[][] result = new string[]{
      new string[]{ "1","2","3","4","5" },
      new string[]{ "2","3","4","5","6" },
      new string[]{ "3","4","5","6","7" },
      new string[]{ "4","5","6","7","8" },
      new string[]{ "5","6","7","8","9" }
    };
    
    int[,] Matrix = new int[n_rows,n_columns];
    
    
        for(int i=0;i<n_rows;i++){
            String input=Console.ReadLine();
            String[] inputs=input.Split(' ');
            for(int j=0;j<n_columns;j++){
                Matrix[i,j]=Convert.ToInt32(inputs[j]);
            }
        }