我有一个矩阵,可以从控制台读取。元素由空格和新行分隔。如何在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
答案 0 :(得分:0)
首先,Console.ReadLine()
从输入中读取一行。因此,为了接受多行,您需要做两件事:
假设用户可以输入任意数量的行,并且空行(只需按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]);
}
}
你可以试试这个加载矩阵