Example #1
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        {
            IList <LetterStats> result = new List <LetterStats>();

            stream.ResetPositionToStart();
            while (!stream.IsEof)
            {
                char charCurrent = char.ToUpper(stream.ReadNextChar());

                // TODO : заполнять статистику с использованием метода IncStatistic. Учёт букв - НЕ регистрозависимый.
                char charNext = char.ToUpper(stream.GetNextChar());

                //если один из символов не является буквой перейти к следующему
                if (!(char.IsLetter(charCurrent) && char.IsLetter(charNext)))
                {
                    continue;
                }

                if (charCurrent == charNext)
                {
                    LetterStats row = result.SingleOrDefault(item => item.Letter == $"{charCurrent}{charNext}");

                    if (row != null)
                    {
                        IncStatistic(row);
                    }
                    else
                    {
                        result.Add(new LetterStats {
                            Letter = $"{charCurrent}{charNext}", Count = 1
                        });
                    }
                }
            }

            return(result);
        }