2017-07-15 8 views
-1

重い計算が必要なデータを含む.csvファイルがあります。 難しいのは、各行には特定のデータグループがあります。C#配列/タスクリストから特定のデータに割り当てる方法

たとえば、a、1,2,3,4-b、1,3,4,5-c、2,3(a、b、c) 、4,6 ....

私はこのグループのそれぞれにプロセスを分けてもらいたいので... "a"は1スレッド、 "b"は1スレッド... 配列またはタスク[1] - > a、タスク[2] - > bを列挙します(行は実際に値a、b、cを持つという事実に基づいていなければなりません)。上記のように)0123各行は、データ・グループの様々な数が例えば

1st line --> {a},{b},{c} 
2nd line --> {b},{d},{e} 
10th line --> {a},{c},{e} 

だから、割り当てが助け

+0

複数のスレッドで1つのファイルを処理するのに最適ではありません。最初にそれをいくつかの文字列バッファに読み込む必要があります。 –

+0

これは問題ではないと言うことができます...しかし、提案のおかげで – John

+0

それから 'a'から 'z'までのすべての文字の位置を見つけて、文字列をスライスします。 –

答えて

1

ため おかげで、あなたのファイルを処理するために、次を使用して、動的であるべきことができます最後に一つ。

Dictionary<string, Task> tasks = new Dictionary<string, Task>(); 
    Dictionary<string, Queue<IEnumerable<string>>> queues = new Dictionary<string, Queue<IEnumerable<string>>>(); 

    foreach(var line in File.ReadAllLines("file.txt")) 
    { 
     var parts = line.Split('-'); 
     foreach(var part in parts) 
     { 
       var keyValues = part.Split(','); 
       if(!tasks.ContainsKey(keyValues[0])) 
       { 
        var queue = new Queue<IEnumerable<string>>(); 
        queues[keyValues[0]] = queue; 
        queue.Enqueue(keyValues.Skip(1)); 
        var task = Task.Run(() => Process(queue)); 
        tasks[keyValues[0]] = task; 
       } 
       else 
       { 
        queues[keyValues[0]].Enqueue(keyValues.Skip(1)); 
       } 
     } 
    } 
関連する問題