用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[,]"

用C#从ProgramLaunch事件的文件中加载数组

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')以获取行,并为数字数组拆分(',')