C#如何将未知行大小的数据的文本文件解析为2D数组
本文关键字:文件 文本 数组 2D 数据 未知 | 更新日期: 2023-09-27 18:29:00
如果我知道数据文件的大小,我可以很容易地将数据文件传递给2D数组,但当你想添加和删除数据时,这是毫无意义的。
如何实例化一个数据行长度为全局且不超出程序其余部分范围的2D数组?
这是一个4行6列的数组的常见代码,但我想向数据文件添加/删除数据,使其具有未知的行长度。
string[,] allStudentData = new string[4, 6];
string[] allStudents = File.ReadAllLines("data.txt");
for (int i = 0; i < allStudents.Count(); i++)
{
for (int j = 0; j < 6; j++)
{
string[] DataIn = allStudents[i].Split(',');
allStudentData[i, j] = DataIn[j];
}
}
感谢您的想法:-)
为什么不使用可变的东西,比如List?
您可以使用.add()命令添加列,并且可以在使用完它(.ToArray())
您可以执行以下
var result = File.ReadAllLines("data.txt").Select(x=>x.Split(',')).ToArray();
您可以使用一个包含自定义对象(可以是数组)的List而不是array,然后在最后将列表转换为ToArray扩展名为的数组
var list = new List<string[]>();
var data1 = new string[2] {"1", "2" };
var data2 = new string[3] {"1", "2", "3" };
list.Add(data1);
list.Add(data2);
list.ToArray(); // converts the list to string[][]
读取完文件后,您可以轻松地将更多项目添加到列表中,然后在最后将所有修改写入文件。如果你认为,在未来你需要的不仅仅是二维数组,而是创建一个自定义对象的价值,比如:
public class Student
{
public string Name { get; set; }
public int Grade { get; set; }
}
并使用它来代替字符串[]:
var studentData = new List<Student>();
稍后的维护将更加容易(添加地址、类等)。我承认,你在阅读和写作时会有更多的工作要做,但如果项目发展壮大,它会有回报的
您仍然可以使用LINQ读取一行数据:
// creates a List<Student>
var studentData = File.ReadAllLines("data.txt")
.Select(row => row.Split(','))
.Select(elements =>
new Student
{
Name = elements[0],
Grade = int.Parse(elements[1])
}).ToList();
如果列数始终为6,并且只有行数未知。只需将代码的前2行更改为:
string[] allStudents = File.ReadAllLines("data.txt");
string[,] allStudentData = new string[allStudents.Count(), 6];
如果列数未知,则可以执行此操作以获得2D结果:
var not2DResult = File.ReadAllLines("data.txt").Select(x => x.Split(',')).ToArray();
var maxRow = not2DResult.Count()-1;
int maxColumn = Enumerable.Select(not2DResult, c => c.Count()).Max()-1;
var result2D = new string[maxRow, maxColumn];
for (int rowNumber = 0; rowNumber < maxRow; rowNumber++)
{
var row = not2DResult[rowNumber];
for (int columnNumber = 0; columnNumber < row.Count(); columnNumber++)
{
result2D[rowNumber, columnNumber] = row[columnNumber];
}
}
尝试使用Lists来保存文件信息。
var myList = new List<string>();
myList = File.ReadLines("data.txt");
var my2DList = new List<List<string>>();
foreach(string line in myList)
my2DList.Add(line.Split(','));
如果你想知道行数,只需使用:
int numberOfLines = my2DList.Count;
对于单行中的项目数量:
int lengthOfLine3 = my2DList[3].Length;