gpt4 book ai didi

c# - 如何在不知道输入类型的情况下创建填充矩阵的方法

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:14 25 4
gpt4 key购买 nike

我想创建一个从控制台读取输入并填充它的方法,例如:

3 4

A B 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 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;
}

到目前为止一切顺利,但是当矩阵不是由字符组成,而是由整数组成时,我该怎么办?

问题:我是否必须为每种类型的矩阵创建不同的方法,或者是否缺少某些东西?

PS:我希望能够在不同矩阵的多个地方使用它,而不仅仅是一个矩阵

最佳答案

你非常接近!只需使用 Char.IsDigit (或 int.TryParse)测试你读过的每个部分,这样你就会知道;当然,例如,您需要为每种 charint 类型创建不同的矩阵数组,但这应该不会太麻烦。


编辑

根据@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;
}

这远非生产就绪代码,因为您需要为解析失败等添加错误处理,但这应该会告诉您如何指定所需的类型。

关于c# - 如何在不知道输入类型的情况下创建填充矩阵的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44357054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com