Евгений Колесников 2 viikkoa sitten
vanhempi
sitoutus
6f1e33b083
1 muutettua tiedostoa jossa 16 lisäystä ja 21 poistoa
  1. 16 21
      articles/5_3_1_9_classlib.md

+ 16 - 21
articles/5_3_1_9_classlib.md

@@ -134,9 +134,11 @@ foreach (DateTime iterDate in dates) {
 }
 ```
 
+Далее реализуем подсчет повторений каждого месяца:
+
 #### Вариант 1
 
->Этот вариант устарел! Использовать его можно, но не нужно. Лучше реализовать временный список с использованием **кортежей**. Это покажет ваше владение средствами языка и уменьшит количество кода/файлов.
+>Этот вариант устарел! Использовать его можно, но не нужно. Лучше реализовать временный список с использованием **словаря**. Это покажет ваше владение средствами языка и уменьшит количество кода/файлов.
 
 Теперь нам нужно объявить список объектов, в котором будет хранится дата и количество повторений этой даты. Для этого создадим класс **DateTimeWithCounter** (вообще, по современным гайдлайнам нужно каждый класс писать в отдельном файле и на демо-экзамене помните про это)
 
@@ -160,8 +162,10 @@ public class Analytics
         // объавляем временный список объектов "ДатаСоСчетчиком"
         var DateTimeWithCounterList = new List<DateTimeWithCounter>();
     
+        // вычисляем предыдущий год
         int PreviousYear = DateTime.Now.Year-1;
         foreach (DateTime IterDate in dates) {
+            // в результат включаем только прошлогодние данные
             if (IterDate.Year == PreviousYear){
                 // вычисляем начало месяца для текущей даты
                 var DateMonthStart = new DateTime(date.Year, date.Month, 1, 0, 0, 0);
@@ -188,12 +192,13 @@ public class Analytics
 
 #### Вариант 2. Новый код с использованием словарей
 
-Теперь нам нужно объявить словарь, в котором ключём будет дата, а значением - количество повторений этой даты.
+В этом варианте мы обойдемся без дополнительных классов - объявим словарь, в котором ключём будет дата, а значением - количество повторений этой даты.
 
 ```cs
 public List<DateTime> PopularMonths(
     List<DateTime> dates) 
 {
+    // создаем словарь
     var dateTimeCounterDictionary = 
         new Dictionary<DateTime, int>();
 
@@ -208,22 +213,12 @@ public List<DateTime> PopularMonths(
                 iterDate.Month, // месяц
                 1, 0, 0, 0);    // день
 
-            if (dateTimeCounterDictionary.ContainsKey) {
-
-            }
-
-            // ищем эту дату во временном списке
-            var index = dateTimeWithCounterList
-                .FindIndex(
-                    item => item.Item1 == dateMonthStart);
-
-            // кортежи можно создавать по-разному
-            if (index == -1)
-            {
-                // такой даты нет - добавляю (используя конструктор)
-                dateTimeWithCounterList.Add( 
-                    new Tuple<DateTime,int>(
-                        dateMonthStart, 1) );
+            // дальше не проверено
+            if (dateTimeCounterDictionary.ContainsKey(dateMonthStart)) {
+                dateTimeCounterDictionary[dateMonthStart] = Tuple.Create(
+                    dateMonthStart, 
+                    dateTimeCounterDictionary[dateMonthStart].Item2 + 1
+                );
             }
             else
             {
@@ -234,9 +229,9 @@ public List<DateTime> PopularMonths(
                     новым кортежем, 
                     который создаем статическим методом
                 */
-                dateTimeWithCounterList[index] = Tuple.Create(
-                    dateTimeWithCounterList[index].Item1, 
-                    dateTimeWithCounterList[index].Item2 + 1);
+                dateTimeCounterDictionary[dateMonthStart] = Tuple.Create(
+                    dateTimeCounterDictionary[dateMonthStart].Item1, 
+                );
             }
         }
     }