将数组拆分为2D或两个数组

Joh*_*ris 2 c#

我有一个文本文件,我正在阅读以提取寄存器值及其包含的内容.

从阵列拉出的2条线是:(完整列表大约700)

0x0003 = 0x0069

0x0007 = 0x0078

我想把它们分成两个数组或一个二维数组,无论什么是最好的(我是新手使用数组)

我的目标是搜索数组例如寄存器3,找到索引然后从第二个数组中提取相应的索引信息.

这是我的代码到目前为止,

  List<string> registerFullList1 = new List<string>();

     for (int i = 0; i < 2000; i++) 
       {
          string[] importStringArray1 = new string[2000];
          importStringArray1[i] = importStringArray1[i] + objReader.ReadLine() + "\r\n";
          //code to extract register info from string array
          string listsplit1 = Regex.Match(importStringArray1[i], @"(?<= 0x)[0-9A-Fa-z\s\=]{13}").Value; 


          if (listsplit1.Contains("0x")) //code to add to list only registers and ignore empty lines
            {
              registerFullList1.Add(Convert.ToString(listsplit1));
            }

                }

  int[] index = new int[2000]; // is there a way here that I don't have to assign  0,1,2,3 to each assignment?

  index[0] = registerFullList1.FindIndex(x => x.StartsWith("0003 ="));
  Register3.Text = Regex.Match(registerFullList1[index[0]], @"(?<= 0x)[0-9A-F]{4}").Value; 

  index[1] = registerFullList1.FindIndex(x => x.StartsWith("0007 ="));
  Register7.Text = Regex.Match(registerFullList1[index[1]], @"(?<= 0x)[0-9A-F]{4}").Value;
Run Code Online (Sandbox Code Playgroud)

这一切都没有问题,我在文本框中显示寄存器内容.但我想要两个数组,所以它更合适,一个有寄存器号,另一个有内容.我无法弄清楚,任何帮助将不胜感激.

UPDATE

阅读答案后的最终代码,

    List<string> registerNumberList = new List<string>();
    List<string> registerContentList = new List<string>();                 
    List<string> registerFullList = new List<string>();

     for (int i = 0; i < 2000; i++)
       {
         string[] importStringArray1 = new string[2000];
         importStringArray1[i] = importStringArray1[i] + objReader.ReadLine() + "\r\n";

         string listsplit1 = Regex.Match(importStringArray1[i], @"(?<= 0x)[0-9A-Fa-z\s\=]{13}").Value; // @"(?<== 0x)[0-9A-F]{4}"  
         string listsplit2 = Regex.Match(importStringArray1[i], @"(?<= 0x)[0-9A-Fa-z\s\=]{4}").Value;// pulls out the register number from original array
           string listsplit3= Regex.Match(importStringArray1[i], @"(?<== 0x)[0-9A-Fa-z\s\=]{4}").Value;//pulls out register content from original array

         if (listsplit1.Contains("0x"))
           {
              registerNumberList.Add(Convert.ToString(listsplit3));//makes a list with register numbers
              registerContentList.Add(Convert.ToString(listsplit2) );//makes a list with register content
              registerFullList.Add(Convert.ToString(listsplit2) + "=" + Convert.ToString(listsplit3));//the full list

                    }

                }

                Dictionary <string, string> registers = registerFullList.Select(line => line.Split('=')
                         .ToArray())
                         .ToDictionary(items => items[0], items => items[1]);   //joins the register numbers and content into a dictionary with just 4 decimal values for each

                 list1.Text = String.Join("\r\n", registerFullList);



                list2.Text =  registers["0010"]; // pulls out register info
Run Code Online (Sandbox Code Playgroud)

多谢你们

Dmi*_*nko 5

我建议使用Linq:

如果你坚持阵列:

  int[][] result = File
    .ReadLines(@"C:\myFile.txt")
    .Select(line => line
       .Split('=')
       .Select(item => Convert.ToInt32(item, 16))
       .ToArray())
    .ToArray();
Run Code Online (Sandbox Code Playgroud)

如果第一个索引是唯一索引(因此可以作为),您可以将数据实现为字典:

  Dictionary<int, int> result = File
    .ReadLines(@"C:\myFile.txt")
    .Select(line => line
       .Split('=')
       .Select(item => Convert.ToInt32(item, 16))
       .ToArray())
    .ToDictionary(items => items[0], items => items[1]);

  ...

  // value == 0x0078 (120)
  int value = result[0x0007];
Run Code Online (Sandbox Code Playgroud)