基于2个参数C#

时间:2017-08-15 10:59:51

标签: c# arrays

我有一个文本文件,我根据新行分成了一个字符串数组。

string [] arr = s.Split('\ n');

现在,我需要进一步将其分类为二维数组,其中每列是一个新的“事务”。 因此,文本文件基本上包含有关银行交易的信息,下面给出了一个例子:

21 ...... 22 .... 23 ..... 31 .... 32 ..... 31 ..... 32 ..... 21 .... 21 ..... 22 ....

数字的开头表示从新行开始的新tx记录。我想把它变成一个2D数组,其中每一列被分组为从21开始的一个tx,直到它遇到下一个21(所以它之前的记录)。

 for (int i = 0; i < arr.Length; i++)
        {
            if (arr[i].StartsWith("21")) 
            {
                indices[i] = i;
            }
        }

我尝试编写上面的代码来检查以21开头的数组元素,然后存储索引但最终存储所有索引。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以尝试正则表达式(即代替拆分提取交易):

  using System.Linq;
  using System.Text.RegularExpressions;

  ... 

  string line = "21 A 22 B 23 C 31 D 32 E 31 F 32 G 21 H 21 I 22 J";

  var result = Regex
    .Matches(line, "21 .*?((?=21 )|$)")
    .OfType<Match>()
    .Select(match => match.Value)
    .ToArray(); // <- let's materialize as na array

  Console.Write(string.Join(Environment.NewLine, result));

结果:

21 A 22 B 23 C 31 D 32 E 31 F 32 G 
21 H 
21 I 22 J

答案 1 :(得分:1)

你需要做的是

string[] arr = s.Split('\n');

List<List<string>> listOfLists = new List<List<string>>(); //dynamic multi-dimensional list

//list to hold the lines after the line with "21" and that line
List<string> newList = new List<string>();  
listOfLists.Add(newList);

for(int i = 0; i < arr.Length; i++)
{
    if(arr[i].StartsWith("21"))
    {
        if(newList.Count > 0)
        {                
            newList = new List<string>();  //make a new list for a column
            listOfLists.Add(newList);      //add the list of lines (one column) to the main list
        }
    }
    newList.Add(arr[i]);  //add the line to a column
}