Язык программирования C#9 и платформа .NET5
Часть 293 из 642 Информация о книге
using System;using System.Linq;using System.Threading;using System.Threading.Tasks;using System.Net;using System.Text;string _theEBook = "";GetBook();Console.WriteLine("Downloading book...");Console.ReadLine();void GetBook(){WebClient wc = new WebClient();wc.DownloadStringCompleted += (s, eArgs) =>{_theEBook = eArgs.Result;Console.WriteLine("Download complete.");GetStats();};<b> // Загрузить электронную книгу Чарльза Диккенса "A Tale of Two Cities".</b><b> // Может понадобиться двукратное выполнение этого кода, если ранее вы</b><b> // не посещали данный сайт, поскольку при первом его посещении появляется</b><b> // окно с сообщением, предотвращающее нормальное выполнение кода.</b>wc.DownloadStringAsync(new Uri("http://www.gutenberg.org/files/98/98-8.txt"));}Класс
определен в пространстве именWebClient. Он предоставляет несколько методов для отправки и получения данных от ресурса, идентифицируемого посредством URL. В свою очередь многие из них имеют асинхронные версии, такие как методSystem.Net, который автоматически порождает новый поток из пула потоков .NET Core Runtime. Когда объектDownloadStringAsync()завершает получение данных, он инициирует событиеWebClient, которое обрабатывается с применением лямбда-выражения С#. Если вызвать синхронную версию этого метода (DownloadStringCompleted), то сообщениеDownloadString()не появится до тех пор, пока загрузка не завершится.Downloading book...Далее реализуйте метод
для извлечения индивидуальных слов, содержащихся в переменнойGetStats(), и передачи строкового массива на обработку нескольким вспомогательным методам:theEBookvoid GetStats(){<b> // Получить слова из электронной книги.</b>string[] words = _theEBook.Split(new char[]{ ' ', '\u000A', ',', '.', ';', ':', '-', '?', '/' },StringSplitOptions.RemoveEmptyEntries);<b> // Найти 10 наиболее часто встречающихся слов.</b>string[] tenMostCommon = FindTenMostCommon(words);<b> // Получить самое длинное слово.</b>string longestWord = FindLongestWord(words);<b> // Когда все задачи завершены, построить строку, показывающую</b><b> // все статистические данные в окне сообщений.</b>StringBuilder bookStats =new StringBuilder("Ten Most Common Words are:\n");foreach (string s in tenMostCommon){bookStats.AppendLine(s);}bookStats.AppendFormat("Longest word is: {0}", longestWord);// Самое длинное словоbookStats.AppendLine();Console.WriteLine(bookStats.ToString(), "Book info");// Информация о книге}Метод
использует запрос LINQ для получения списка объектовFindTenMostCommon(), которые наиболее часто встречаются в массивеstring, а методstringнаходит самое длинное слово:FindLongestWord()string[] FindTenMostCommon(string[] words){var frequencyOrder = from word in wordswhere word.Length > 6group word by word into gorderby g.Count() descendingselect g.Key;string[] commonWords = (frequencyOrder.Take(10)).ToArray();return commonWords;}string FindLongestWord(string[] words){return (from w in words orderby w.Length descending select w).FirstOrDefault();}После запуска проекта выполнение всех задач может занять внушительный промежуток времени, что зависит от количества процессоров в машине и их тактовой частоты. В конце концов, должен появиться следующий вывод:
Downloading book...Download complete.Ten Most Common Words are:DefargehimselfManette