C# 如何在不知道输入类型的情况下创建填充矩阵的方法
我想创建一个从控制台读取输入并填充它的方法,例如: 34 A、B、D E B B B I J B B 第一行读取尺寸,其余的是矩阵中的输入(中间没有空行,否则我无法粘贴)。 我写道:C# 如何在不知道输入类型的情况下创建填充矩阵的方法,c#,matrix,C#,Matrix,我想创建一个从控制台读取输入并填充它的方法,例如: 34 A、B、D E B B B I J B B 第一行读取尺寸,其余的是矩阵中的输入(中间没有空行,否则我无法粘贴)。 我写道: static void Main(string[] args) { var input = Console.ReadLine(); char[,] matrix = ReadAndFillMatrix(input); } private static cha
static void Main(string[] args)
{
var input = Console.ReadLine();
char[,] matrix = ReadAndFillMatrix(input);
}
private static char[,] ReadAndFillMatrix(string input)
{
var size=input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
.Select(int.Parse)
.ToArray();
var rows = size[0];
var cols = size[1];
var matrix = new char[rows, cols];
for (int i = 0; i < rows; i++)
{
var line = Console.ReadLine()
.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
.Select(char.Parse)
.ToArray();
for (int j = 0; j < cols; j++)
{
matrix[i, j] = line[j];
}
}
return matrix;
}
static void Main(字符串[]args)
{
var input=Console.ReadLine();
字符[,]矩阵=读取和填充矩阵(输入);
}
私有静态字符[,]ReadAndFillMatrix(字符串输入)
{
var size=input.Split(新字符[]{''},StringSplitOptions.RemoveEmptyEntries)
.Select(int.Parse)
.ToArray();
变量行=大小[0];
var cols=大小[1];
var矩阵=新字符[行,列];
对于(int i=0;i
到目前为止还不错,但是当矩阵不是由字符组成,而是由整数组成时,我该怎么办呢
问题:我是否必须为每种类型的矩阵创建不同的方法,还是缺少一些东西
PS:我希望能够在不同矩阵的多个位置使用它,而不仅仅是一个你非常接近!只需使用(或
int.TryParse
)测试您读过的每一部分,这样您就知道了;当然,例如,您需要为每种类型char
和int
创建不同的矩阵数组,但这应该不会太繁重
编辑 根据@kokosaish对这个答案的评论,我更新了以下内容:
void Main()
{
var stringMatrix = ReadAndFillMatrix<string>(s => s);
var intMatrix = ReadAndFillMatrix<int>(int.Parse);
var doubleMatrix = ReadAndFillMatrix<double>(double.Parse);
}
private static T[,] ReadAndFillMatrix<T>(Func<string,T> sectionParser)
{
var readAndSplit =
new Func<string[]>(
() =>
{
return
Console.ReadLine()
.Split(new char[] { ' '}, StringSplitOptions.RemoveEmptyEntries)
.ToArray();
});
var size = readAndSplit();
var rows = int.Parse(size[0]);
var cols = int.Parse(size[1]);
var matrix = new T[rows, cols];
for (var i = 0; i < rows; i++)
{
var line = readAndSplit();
for (var j = 0; j < cols; j++)
{
matrix[i,j] = sectionParser(line[j]);
}
}
return matrix;
}
void Main()
{
var stringMatrix=ReadAndFillMatrix(s=>s);
var intMatrix=ReadAndFillMatrix(int.Parse);
var doubleMatrix=ReadAndFillMatrix(double.Parse);
}
私有静态T[,]ReadAndFillMatrix(Func sectionParser)
{
var readAndSplit=
新职能(
() =>
{
返回
Console.ReadLine()
.Split(新字符[]{“”},StringSplitOptions.RemoveEmptyEntries)
.ToArray();
});
var size=readAndSplit();
var rows=int.Parse(大小[0]);
var cols=int.Parse(大小[1]);
var矩阵=新的T[行,列];
对于(变量i=0;i
这远不是生产就绪代码,因为您需要为解析失败时添加错误处理等,但这应该说明如何指定所需的类型。尝试创建类型为var的锯齿数组。检查此问题以了解解决方案
在该数组中,可以将每一行存储为一个新数组。这将在运行时发生,因此您可以执行TypeOf来查找确切的数据类型。或者您可以将其全部保留为var.,但我需要指定我在方法中返回的类型。即使我发现矩阵是由int而不是char组成的,我已经声明该方法是char[,],这意味着我应该只返回char[,],不是吗?@kokosaish我已经更新了答案,这将允许您创建任意类型的矩阵,前提是您可以对该特定类型执行解析操作。使用泛型类型如何?比如说,一个变量?