如何将字符串及其状态保存到List中?

时间:2017-09-05 13:47:01

标签: c# entity-framework list idictionary

我使用EF Core 1.2在C#中使用以下代码,我在那里阅读textarea的输入并检查每一行是否与我的某个模式匹配。 在检查了一行后,我试图设置一个状态,告诉我它是否与一个模式匹配。

现在我想将这些行临时加上它的每个状态保存到一个列表中,这样我就可以将这个列表传递给我的视图,我希望在表格中显示每一行及其状态。

我的问题是如何保存每一行及其状态?我想过使用词典,但我不确定这是否是解决我问题的最佳方案。

using (StringReader reader = new StringReader(Request.Form["ExpressionTextarea"].ToString()))
{
    string line = string.Empty;

    do
    {
        line = reader.ReadLine();

        if (line != null)
        {
            string state = CheckStringLine(line);

            /**** HOW TO SAVE EACH LINE PLUS ITS STATE TEMPORARILY?
            //IDictionary<string, string> dictionary = new Dictionary<string, string>();
            //dictionary.Add(line, status);
            ****/
        }
    } while (line != null);

    //***PASSING MY LIST TO MY VIEW
    return View(MYLIST);
}

//Checks if line matches a pattern
public string CheckStringLine(string Line)
{          
    string state = "";
    //Pattern1: (Ein | Eine) A ist (ein | eine) B.
    string pattern1 = @"^(?<Artikel1>(Ein|Eine){1})\s{1}(?<Second>[A-Z]{1}[a-zäöüß]{1,})\s{1}ist\s{1}(?<Artikel2>(eine|ein){1})\s(?<Fourth>[A-Z]{1}[a-zäöüß]{1,})\.$";

    //Pattern2: (Ein | Eine) A (oder (ein | eine) B)+ ist (ein | eine) C.
    string pattern2 = @"^(?<First>(Ein|Eine){1})\s{1}(?<Second>[A-Z]{1}[a-zäöüß]{1,})(\s{1}oder\s{1}(?<OptionalArtikel>(ein|eine){1})\s{1}(?<OptionalBegriff>[A-Z]{1}[a-zäöüß]{1,}))+(\s{1})ist\s{1}(?<Third>(eine|ein){1})\s(?<Fourth>[A-Z]{1}[a-zäöüß]{1,})\.$";

    var match1 = Regex.Match(Line, pattern1);
    var match2 = Regex.Match(Line, pattern2);

    if (match1.Success)
    {
        state = "This Line is using pattern1";

        return state;
    }
    if (match2.Success)
    {
        state = "This Line is using pattern2";
        return state;
    }           

    state = "No matches";
    return state; 
}

2 个答案:

答案 0 :(得分:2)

使用library(reinstallr) package.dir <- getwd() base_path <- normalizePath(package.dir) files <- list.files(file.path(base_path, "R"), full.names = TRUE) packages <- unique(reinstallr:::scan_for_packages(files)$package) packages 适用于您需要键/值对的情况,我在此理解您只想存储内容。此外,如果您想保留订单,它将无法运作。

最简单的方法是使用包含Dictionary的{​​{1}},如果您不想为此创建自己的类型。

List

然后,当您需要它们时,您可以从列表中获取元组,并从Tuple获取行,从var list = new List<Tuple<string, string>>(); list.Add(new Tuple<string, string>(line, state)); 获取该行。

答案 1 :(得分:0)

您可以使用任何内存数据结构来存储您的状态。 HashTable将比其他数据结构快得多,但它不是通用的。你也可以使用Dictionary,这是通用的。