将 2D 数组及其元素从字符串转换为 int
本文关键字:字符串 转换 int 元素 2D 数组 | 更新日期: 2023-09-27 18:30:22
尽管我试图在这里的问题中找到类似的版本,但我找不到一些东西......所以我正在寻求你的帮助。从文本文件中读取一些数字(现在是字符串格式)后,我将它们分成行和列,并将它们添加到 2d 数组中(也是字符串格式)。现在我想将每个数字转换为整数,以便以后可以对数字进行排序。这是我的代码...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace ArrayProgram
{
class Program
{
int number = 0;
int i = 0;
int k = 0;
string strnum;
public void onetohundredints()
{
StreamWriter writer = new StreamWriter("numberstored.txt");
for (i = 0; i < 10; i++)
{
for (k = 0; k < 10; k++)
{
number++;
Console.Write(number + " ");
strnum = number.ToString();
writer.Write(strnum + " ");
}
Console.WriteLine();
writer.WriteLine();
}
writer.Close();
}
public void readints()
{
StreamReader reader = new StreamReader("numberstored.txt");
string data = reader.ReadToEnd();
reader.Close();
string[,] dataarray = new string[10,10];
int[] numbers = new int[100];
string[] dataperlines = data.Split(new[] { ''r',''n' },StringSplitOptions.RemoveEmptyEntries);
for(int i=0; i<=dataperlines.Count()-1; i++)
{
string[] numbersperrow = dataperlines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (int j=0; j<=numbersperrow.Count()-1; j++)
{
dataarray[i, j] = numbersperrow[j];
}
}
}
public static void Main(string[] args)
{
Program prog = new Program();
prog.onetohundredints();
prog.readints();
Console.ReadKey();
}
}
}
将数字插入 2d 数组后,如何将所有数字转换为整数?
如果您没有特定的理由拥有字符串数组,则可以首先将数据保存为int
。只需更改您的内在for
循环即可:
var parsed = int.TryParse(numbersperrow[j], out dataarray[i, j]);
if (!parsed)
{
// Error
}
虽然这应该有效,但我建议重写您的 ReadData 方法,使其类似于下面的示例。
public int[,] ReadData(string filePath, int xDimension, int yDimension)
{
var results = new int[xDimension, yDimension];
var lines = File.ReadLines(filePath);
for (var i = 0; i < allLines.Count(); i++)
{
var values = lines[i].Split(new[] { ' ' },
StringSplitOptions.RemoveEmptyEntries);
for (var j = 0; j < values.Count(); j++)
{
var parsed = int.TryParse(values[j], out results[i, j]);
if (!parsed) { }
}
}
return results;
}
你把所有东西都放进一个字符串数组里。该数组只能保存字符串,不能保存数字。如果要使 2d 数组保存数字,请将其定义为 int[,] dataarray = new int[10,10];
接下来,在最后一个循环中,只需执行dataarray[i, j] = Convert.ToInt32(numbersperrow[j]);
编辑:如果您不确定numbersperrow[j]
将是一个数字,则可以使用int.TryParse(numbersperrow[j], out value)
。 如果转换不成功,Value
将返回false
。
地说这两种解决方案都有效。我现在在我的 2d 数组中有我的数字。但现在我想和他们一起玩。假设我希望以相反的顺序打印在屏幕上的数字。
拥有这个正确的解决方案:
int numbers;
int[,] dataarray = new int[10,10];
string[] dataperlines = data.Split(new[] { ''r',''n' },StringSplitOptions.RemoveEmptyEntries);
for(int i=0; i<=dataperlines.Count()-1; i++)
{
string[] numbersperrow = dataperlines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (int j=0; j<=numbersperrow.Count()-1; j++)
{
numbers = int.Parse(numbersperrow[j]);
dataarray[i, j] = numbers;
Console.Write(numbers + " ");
}
Console.WriteLine();
}
我知道我必须做一个双循环。但是,如何编写成功的语法才能正确打印数字呢?我也试过这个:
int[,] reversedarray = new int[10, 10];
reversedarray[i, j] = Array.Reverse(dataarray[i,j]);
但是数据数组[i,j]变为红色,并且错误"无法从int转换为系统。数组发生...我错过了什么?
我也试过这个...
for (i = 10; i <= dataperlines.Count(); i--)
{
string[] numbersperrow = dataperlines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (j =10; j <= numbersperrow.Count(); j--)
{
numbers = int.Parse(numbersperrow[j]);
reversedarray[i, j] = numbers;
Console.Write(numbers + " ");
}
Console.WriteLine();
}
但是我有一个来自 IndexOutOfRange 的异常
string[] numbersperrow = dataperlines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
我明白,由于我也将列分成几行,因此没有必要再写一次,但是我卡住了。我尝试简化代码,因为我有我的 2darray 及其元素,我的尝试是错误的。还有什么建议吗?