Найти указанный c элемент в списке быстрее - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть текстовый файл, который содержит 8,14 миллиона строк. Я пытаюсь найти все строки, которые содержат определенные c слова. В приведенном ниже коде есть раздел ******. Это займет 1,07 секунды в этом разделе. Эта скорость настолько медленная, что я хотел бы найти самый быстрый способ.

Как я могу сделать это быстрее всего?

// The Random.txt file contains 8.14 million items of the below format.  
// format = [groupnumber],[name],[num1],[num2],[num3],[num4],[num5],[num6]    

// group1,car,1,22,37,39,42,45  
// group2,fruit,1,12,13,14,22,36  
// group3,robot,4,6,9,31,32,34  
// group4,cat,11,12,17,19,42,45  
// group5,dog,40,41,42,43,44,45  
// ...
// ...

// load file to list group1  
var group1 = File.ReadLines("Random.txt", Encoding.Default).ToList();  

*****************************************************************************************  
//I want this section to be faster
Stopwatch w = new Stopwatch();
w .Start();  

// Find items in group1 that contain all 4,6,9,31,32 in num area  
var group2 = group1.AsParallel().Select(x => x + ",").Where(x => x.Contains(",4,")  
                                                && x.Contains(",6,")  
                                                && x.Contains(",9,")  
                                                && x.Contains(",31,")  
                                                && x.Contains(",32,"))  
                                    .Select(x => x.Substring(0, x.Length - 1)).ToList();  
w .Stop();
//Elapsed Time : 00:00:01.0722169  
//I want this section to be faster
******************************************************************************************  

1 Ответ

0 голосов
/ 05 февраля 2020

Это может сэкономить вам 2 выбора:

    var group2 = group1.AsParallel().Where(temp => {
                                                var x = temp + ",";
                                                return x.Contains(",4,")  
                                            && x.Contains(",6,")  
                                            && x.Contains(",9,")  
                                            && x.Contains(",31,")  
                                            && x.Contains(",32,");}
                                );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...