2017-09-05 6 views
0

私はこのコードをC#でEF Core 1.2を使用しています。ここで私はテキストエリアの入力を読んでいて、それが私のパターンの1つと一致するかどうかを確認します。 1行をチェックした後、1つのパターンに一致するかどうかを知らせる状態を設定しようとしています。文字列とその状態をListに保存する方法は?

ここでは、これらの行を一時的に加えて各状態をリストに保存して、このリストをビューに渡すことができます。ここで、各行とその状態を表に表示します。

私の問題は、どのように各行に状態を保存するのですか?私は辞書を使用することを考えましたが、これが私の問題のための最善の解決策であるかどうかはわかりません。 Dictionaryを使用して

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; 
} 
+1

すべてのキーが一意である限り、辞書は良好に聞こえる。それ以外の場合は、C#7のタプルデータ型 –

答えて

2

は、キー/値のペアをしたいと私はあなただけのものを保存したいここで理解状況にあります。また、注文を保存したい場合は動作しません。

最も簡単な方法は、独自のタイプを作成しない場合は、Tupleを含むListを使用することです。あなたがそれらを必要なとき

var list = new List<Tuple<string, string>>(); 
list.Add(new Tuple<string, string>(line, state)); 

その後、あなたはリストからタプルを取得し、Item2からItem1からラインや状態を得ることができます。

+0

を参照するか、匿名型var v = new {Amount = 108、Message = "Hello"};可能です –

+0

@TomSchardt匿名型をList型に安全に置くことはできますか? –

+0

new [] {new {Value = "string1"、State = "state1"}、new {Value = "string2"、State = "state2"}}。ToList(); –

0

メモリ内のデータ構造を使用して、状態を保存できます。 HashTableは他のデータ構造よりもはるかに高速ですが、一般的ではありません。 Dictionaryも同様に使用できますが、これは一般的なものです。

関連する問題