将字符串转换为多维数组

时间:2014-01-22 13:01:15

标签: c# arrays multidimensional-array

我有一个矩阵,可以从控制台读取。元素由空格和新行分隔。如何在c#中将其转换为多维int数组?我试过了:

String[][] matrix = (Console.ReadLine()).Split( '\n' ).Select( t => t.Split( ' ' ) ).ToArray();

但是当我点击回车时,程序结束,它不允许我输入更多行。

示例是:

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  

4 个答案:

答案 0 :(得分:0)

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

  1. 有一个循环,允许用户继续输入数据行。您可以让他们离开,直到他们留下一行空白,或者您可以将其修改为5行输入
  2. 存储这些“行”数据以供将来处理。
  3. 假设用户可以输入任意数量的行,并且空行(只需按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(' ').ToArray()).ToArray();
    

    这会给你一个字符串数组(这是你的例子)。如果你想要这些是整数,你可以随时解析它们:

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

答案 1 :(得分:0)

// 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" }
};

答案 2 :(得分:0)

可以通过多种方式完成

你可以读取一行包含由char分隔的多个数字,用该char分割得到一个int数组,然后你应该获取一个矩阵。

使用开箱即用的linq,抓取步骤没有什么简单的方法,我认为使用像LinqLib这样的codeplex中的第三方库并不是真的。

答案 3 :(得分:0)

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]);
        }
    }

你可以试试这个加载矩阵