Advertisement
DaniPasteBin

Untitled

Jun 29th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.82 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;
  6. using System.Threading.Tasks;
  7.  
  8. namespace _04.Weather
  9. {
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             //while цикъл
  15.             string input = Console.ReadLine(); //не всичко от входа ми трябва, изолирам end
  16.             string pattern = @"([A-Z]{2})([0-9]+\.[0-9]{1,2})([A-Za-z]+)\|";
  17.  
  18.             //ще изскачат нови редове, и ще ги запаметя в лист, който да ползвам за входни данни, защото в пръвия input попада и end
  19.             List<string> lines = new List<string>();
  20.             while (input!="end")  //слагам края на цикъла
  21.             {
  22.                 lines.Add(input);  //пълня празния лист
  23.  
  24.                 input = Console.ReadLine();
  25.             }
  26.             List<Match> myMatches = new List<Match>(); //два сорта имам . УНИКАЛНОТО е че листа от мачове дава възможност за групи, които после ще ползваме
  27.             foreach (var line in lines) //от листа с всеки вкаран ред
  28.             {
  29.                 MatchCollection m = Regex.Matches(line,pattern); //и искам да събера мачовете на един ред
  30.                 //сега ги пълня в листа
  31.                 foreach (Match thisMatch in m) //тук всички съвпадения в линията ще ги запише в лист
  32.                 {
  33.                     myMatches.Add(thisMatch); //във вложения foreach всички съвпадения в линията ще ги запише в листа
  34.                 }
  35.             }
  36.             //като се извъртят двата цикъла ще имам мачове в myMatch, но не е готово за принт, защото има по условие че може да се презаписват данни
  37.             //в такъв случай се ползва Dictionary
  38.             Dictionary<string, List<string>> weather = new Dictionary<string, List<string>>();
  39.             foreach (Match current in myMatches) //с този цикъл ще напълня речника, чрез проверки и въпроси
  40.             {
  41.                 //ако речника не съдържа (града , който е група 1 , стойността му)
  42.                 if (!weather.ContainsKey(current.Groups[1].Value))
  43.                 {
  44.                     //ако не съдържа ще пълним листа, който е всъщност Value от kvp
  45.                     List<string> list = new List<string>();
  46.                     list.Add(current.Groups[2].Value);   //това е list за Value
  47.                     list.Add(current.Groups[3].Value);   //това е list за Value
  48.                     weather.Add(current.Groups[1].Value, list); //това е Key в Dictionary
  49.  
  50.                 }
  51.                 else //ако го има
  52.                 {
  53.                     //изчистваме листа и добавяме новите две данни
  54.                     weather[current.Groups[1].Value].Clear(); //изтривам го
  55.                     weather[current.Groups[1].Value].Add(current.Groups[2].Value);
  56.                     weather[current.Groups[1].Value].Add(current.Groups[3].Value);
  57.                 }
  58.                
  59.             }
  60.             foreach (var pair in weather.OrderBy(x => double.Parse(x.Value[0])))
  61.             {
  62.                 Console.WriteLine($"{pair.Key} => {double.Parse(pair.Value[0]):F2} => {pair.Value[1]}");
  63.             }
  64.         }
  65.     }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement