用C#从ProgramLaunch事件的文件中加载数组
本文关键字:文件 加载 数组 事件 ProgramLaunch | 更新日期: 2023-09-27 18:27:24
现在我创建以下数组(在Button_click事件上):
string[,] Butt = new string[2, 3] {
{ "120", "200", "#ffc90e" },
{ "380", "200", "#22b14c" }
};
int[,] arrat = new int[,] {
{ 199, 199 },
{ 257, 189 },
{ 407, 185 },
{ 521, 196 },
{ 608, 232 },
{ 620, 300 },
{ 509, 338 },
{ 386, 344 },
{ 288, 347 }
};
我想优化我的代码,这样我就不必每次都创建新的数组。更好的解决方案是在程序启动时从文件加载阵列
假设我有一个CSV文件,其中包含以下内容:
199, 199
257, 189
407, 185
521, 196
如何将所有内容加载到数组中:"int[,]array=new int[,]"
int[][] array = System.IO.File.ReadAllLines("myFilePath")
.Select(line => line.Split(',')
.Select(entry => Convert.ToInt32(entry.Trim()))
.ToArray())
.ToArray();
您应该进行一些错误检查,但您可以从开始
private static string[,] Parse(string path, int columnCount, char columnSeparator = ',')
{
string[] lines = File.ReadAllLines(path);
string[,] result = new string[lines.Length, columnCount];
for (int rowIndex = 0; rowIndex < lines.Length; ++rowIndex)
{
string[] columns = lines[rowIndex].Split(new char[] { columnSeparator }, columnCount);
for (int columnIndex = 0; columnIndex < columns.Length; ++columnIndex)
result[rowIndex, columnIndex] = columns[columnIndex];
}
return result;
}
转换的Helper方法(相反,您可能希望嵌入到Parse()
方法中):
private int[,] ConvertToInt(string[,] matrix)
{
int[,] result = new int[matrix.GetLength(0), matrix.GetLength(1)];
for (int i = 0; i < result.GetLength(0); ++i)
{
for (int j = 0; j < result.GetLength(1); ++j)
{
int value = 0;
if (Int32.TryParse(matrix[i, j], System.Globalization.NumberStyles.Integer, CultureInfo.InvariantCulture, out value))
result[i, j] = value;
}
}
return result;
}
(我不使用LINQ,因为我想您应该在这些方法中放入大量错误检查来验证输入数据)。
为什么不将这些数组定义为类中的静态成员呢。这样,它们就不会在每次创建该对象的新实例时重新生成。
要从文件中加载它们,请使用StreamReader类的ReadToEnd方法,然后拆分('''r''n')以获取行,并为数字数组拆分(',')