В моем алгоритме я пытаюсь сделать следующее.C# Параллельный для исключения индекса цикла после удаления элемента
while (R.Count > 0)
{
//R is also List<string>()
var N = new List<string>();
var first = R[0];
N.Add(first);
R.Remove(first);
//below commented code runs just fine but it takes a lot of time that is why i need to do multithreading to make it faster
//for (int i = R.Count - 1; i >= 0; i--)
//{
// if (hamming(first, R[i]))
// { //hamming is a function just compare two strings and returns true or false.
// N.Add(R[i]);
// R.RemoveAt(i);
// }
//}
//Below is code of my attempt of multithreading the loop. I have tried it with foreach loop as well and it gives same error 'index out of range or argument exception'
//ATTEMPT 1 :-
Parallel.For(0,R.Count, i =>
{
if (hamming(first, R[i]))
{
N.Add(R[i]);
R.RemoveAt(i);
}
});
//ATTEMPT 2 :-
Parallel.For(0,R.Count, i =>
{
if (hamming(first, R[i]))
{
N.Add(R[i]);
R[i]="";
}
});
var K = R.Where(a => a == "").ToList();
var nc = cou - N.Count;
//the value of 'K.Count' and 'nc' should be same here but I have checked in debugger its not the same.
N_Total.Add(N);//this is just a List<List<string>>
}
Кодекс говорит само за себя, но я все еще будет пытаться разработать ИК дальше здесь.
В принципе, мне нужно запустить этот алгоритм и сравнить значения, как показано в коде, и если hamming возвращает true, я должен добавить это значение в 'N' и удалить его из 'R', я должен удалить его, потому что, когда следующий время, в течение которого выполняется цикл while во время цикла. «R» должен быть меньше, и только те значения должны присутствовать в R, которые не удовлетворяли условию хамминга в предыдущем цикле цикла.
Я могу уточнить, если кто-то должен понять больше.
То, что я хочу, что для достижения этой цели в некоторых многопоточных образом и без исключений index out of range
или Argument exceptions
.
Большое спасибо.
ConcurrentBag 'N' не имеет метода расширения 'Добавить', как я могу затем добавлять к нему элементы? – touseef
проверьте свой код. вы положили 'using System.Collections.Concurrent;' поверх кода? @touseef –
ConcurentBag имеет метод Add, https://msdn.microsoft.com/en-us/library/dd381779.aspx – MadOX