C# programming. Lesson 9. Sets
HTML-код
- Опубликовано: 19 янв 2014
- Описывается, как устроены различные множества (списки, коллекции, последовательности) в языке C# и как работать с ними.
Ссылки на предыдущие уроки:
Урок 8. Обобщения. • Уроки C#. Обобщения
Урок 7. Пример создания приложения. • Уроки C#. Пример созда...
Урок 6. Интерфейсы. • Уроки C#. Интерфейсы.
Урок 5. Запечатанные, статические и абстрактные классы. • Уроки C#. Запечатанные...
Урок 4. Наследование и полиморфизм. • Уроки C#. Наследование...
Урок 3. Делегаты и события. • Уроки C#. Делегаты и с...
Урок 2. Состав типа. • Уроки C#. Состав типа.
Урок 1. Типы данных. • Уроки C#. Типы данных.
продолжайте, не останавливайтесь ни в коем случае!!! У вас замечательные уроки!
У вас одни из самых лучших уроков на ютубе. Не останавливайтесь.
Интерес есть, хотелось чтобы вы продолжили свою работу))) Удачи ВАМ!!!
Очень нравятся твои уроки, после просмотра не остается непонятных моментов или вопросов.. почему именно так, или других.
я рад, что мне удалось найти твой канал именно сейчас. Спасибо мужик!
Просто нету слов. Насколько всё понятно и грамотно. Спасибо большое!!!
У Вас прекрасные видео уроки, я перекопал весь русскоязычный интернет и скажу, что вы для меня лучший среди лучших. Продолжайте, прошу вас. Для меня это как хобби, я изучаю язык C#, для себя и вы дали мне многое в понимание ООП. Буду ждать ваших новых уроков. Спасибо Вам огромное, за ваш труд.
Спасибо автору за уроки, смотрю всего 9 урок и понимаю на сколько я поверхностно знал возможности платформы dotNET.
This is coolest tutorial I ever saw! please keep going and show more possibilities in c#. Specially if you can do some part for web programing in c#.thank you from Chicago.
Занятие по реальному приложению в планах есть, скорее всего - по окончанию изучения LINQ. Я только еще не совсем определился с форматом.
vk.com/snowsoft
вы помогли моему брату в свое время и теперь он работает в крупной компании. А теперь помогаете мне. Жаль что я не настолько развит в программировании и многое не понятно. Но по 4-8 заходов по кругу помогают освоить материал. А без ваших видео я бы и вовсе сдулся, так как на метаните чем дальше в лес, тем меньше дров
Один из самых лучших курсов в сети !!! ;)
Это просто шедеврально !!!
Отличный урок, большое спасибо!
Очень замечательные уроки)) Спасибо большое))
Замечательные уроки. Спасибо автору.
Прекрасные уроки. Пожалуйста продолжайте.
Лучшие видеоуроки!!!
Клевые уроки, прочитал сначала рихтера и шилда, но все равно многие моменты понял только в ваших уроках. Спасибо!
Наверное, хотя что там наверное - лучшие видео уроки которые я видел! Спасибо огромное
Просто, доступно. Спасибо
Очень интересные уроки. Для меня просто находка. Большое спасибо.
Огромное спасибо Вам за данный курс.
Очень хорошо, что Вы не закончили свои уроки.
Довольно глубоко и интересно. Раньше даже не задумывался как именно работают методы в List или ArrayList.
Спасибо вам большое за ваш труд
Уроки классные! Лайк и подписка.
Очень грамотное объяснение, как и все предыдущие. Больше Вам спасибо!!!
Спасибо за инфу!!
Спасибо, полезно повторить
Спасибо! Все очень толково и без лишнего. Я имея опыт работы, решил доучить все же Шарп :) вот, смотрю Ваши видео с огромным удовольствием!
2:43 Начало. Множества. Последовательность IEnumerable.
21:24 ICollection
Спасибо.
Канал довольно хорош!)
Касательно скрытия реализации методов путем явной реализации.
Если привести ваш StoreCollection к типу ICollection - метод Add будет доступен.
ICollection collection = new StoreCollection("");
collection.Add(1);
тоесть такая запись будет валидной и в коллекцию всё равно можно будет добавить новый елемент.
Хороший материал
Класс
Такие сложные темы и всё понятно (сравниваю с Троелсеном)
Спасииииибо (/◕ヮ◕)/
int current = 1;
for (int i = 0; i < _itemCount; i++)
{
if (i > 0) current += 3;
yield return current;
}
так все же корректней
На 14:30 лучше так, ибо при _position == _itemCount, _current продолжает возростать, но _position не меняеться, а MoveNext возвращает false.
if(_position > 0 && _position < _itemCount)
_current += 3;
if (_position < _itemCount)
_position++;
if (_position < _itemCount)
return true;
return false;
Оу "Крестный отец"- топчик))
Про метод Contains добавлю, что лучше завести переменную string и в неё положить искомое число в виде строки, тогда не придётся парсить строку в число на каждой итерации.
я бы расколол твой урок на несколько частей, где в каждой теме мы рассматриваем по чуть-чуть, очень информативное видео, но я бы сказал, что очень много :) все равно спасибо.
Может я и придираюсь, но мне кажется что метод Contains логичнее было реализовать подругому. Вместо того что бы каждый элемент преобразовывать в число и потом сверять, быстрее мне кажется наоборот. Преобразовать INT в строку и потом сравнивать. Хотя на качество урока это не влияет. Все как всегда на высоте!)))
По поводу примера реализации класса Dictionary
Я вижу тут избыточность. Поправьте меня если я не прав.
Мы передаем “Id” в качестве первого параметра множества и в качестве элемента множества в составе объекта класса “Person”. Достаточно же передать “Id” в качестве ключа, а Name в качестве элемента множества?
Спасибо за уроки! Все очень нравится и понятно изложено
.Нет ли у Вас в планах создать еще один урок посвященный созданию реального приложения? Лично для меня такие уроки нагляднее всего объясняют и способствуют пониманию языка.
Спасибо, что после ваших уроков в голове наводится порядок! Зря вы не стали рассказывать подробнее про foreach механизм, возможно чуть яснее стало бы про IEnumerable (это одна из магических тем для понимания). И лекции до 1 часа (включительно) вполне оптимальны по времени.
спасибо большое за видео уроки!!!
здорово что я вас нашла когда вы уже отсняли много уроков. можно в захлёп посмотреть.
а вы планируете ещё делать какие нибудь видео уроки?
Спасибо за уроки. Я только начинаю изучать программирование, поэтому вопрос будет моего уровня) Когда создали экземпляр класса Progression и в параметр конструктора передали число, далее через цикл foreach проходим по каждому элементу. Как вызывается метод GetEnumerator который возвращает тип ProgressionIterator и далее идет вызовы MoveNext и Current. Как это происходит, если мы их не вызывали?
большое спасибо за хорошие уроки!
один нюанс в классе StoreCollection не удаляет если это последний элемент - как раз новички могут попробовать реализовать для практики как это сделать
сокрытие методов работает не всегда, а только при добавление элементов(других вариантов я не увидела, хотя не исключено, я только новичок) вот такой код к примеру работает нормально:
int[] mass = new int[5];
mass[1] = 5;
Console.WriteLine(mass[1]);
int index = ((IList)mass).IndexOf(5);
Console.WriteLine(" индекс: "+ index);
((IList)mass).Clear();
Console.WriteLine(mass[1]);
но наверно такой способ поиска номера элемента не приветствуется?
Вопрос по классу class StoreCollection : ICollection
ты там рассматриваешь все члены, но кроме
IEnumerator IEnumerable.GetEnumerator()
вот для меня не очень понятно почему во-первых метод через точку назван
ну и что там в нём тоже интересно и зачем он
Это необобщенная явная реализация интерфейса IEnumerable. См. урок про обобщения и урок про интерфейсы. Интерфейс IEnumerable включает в себя интерфейс IEnumerable, поэтому его необходимо реализовывать. Но чтобы он не мешался под ногами, его реализовывают явно.
с 14 минуты. многократный вызов метода MoveNext постоянно изменяет значение _current, даже если метод возвращает false и мы превысили _itemCount значение _current будет меняться. В свою очередь последующий вызов метода Current вернет не верное значение.
Вообще чтобы более хорошо понимать принцип реализации множеств лучше напрсать свои реализации каждого интерфейса
это да, к сожалению, в рамках одного урока рассказать еще и о реализации IList и Dictionary невозможно, поэтому пусть это будет своего рода самостоятельное упражнение.
Урок хороший, жаль, что видео выходят очень редко.
насколько я знаю, в паскале можно делать пересечение, разность и объединение множеств, как это делается в C#? Или нужно придумывать свой метод для этих операций?
Почему на 18 минуте Вы говорите о переполнении стека, ведь значения нигде не хранятся, массива нет, а только задано правило вычисления значения "следующего элемента", который в памяти хранится только до вычисления "следующего элемента". Или я чего-то не понимаю? Спасибо
Стек кончится, потому что фактически все элементы последовательности сохраняются, в кишках цикла foreach.
Стек не переполнится, ведь мы ничего не храним и не выполняем рекурсивных вызовов методов. А вот int может запросто переполниться
Успел посмотреть только многопоточность. Хотелось бы кроме прикладного аспекта, немного подробнее о теории. В связке с Рихтером ваши лекции очень хороши. Они здорово дополнили друг друга и все стало понятнее. Но использовать какой-то один источник, данные получаются не полные или как в случае с Рихтером, очень тяжёлые в понимании.
Является ли правильным каждый раз вызывать GetNumbers() который читает из файла и возвращает массив, вместо того чтобы сделать приватный массив и загрузить его единожды перед использованием экземпляра коллекции?
ДЕВЯНОСТО ПЕРВЫЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА
и эту строчку если можно прокомментируйте
string[] strings = line.Split(new string[] {";"}, StringSplitOptions.RemoveEmptyEntries);
это относится более наверное к синтаксису.
Но она уж больно наворочена.
Вот допустим - new string[] {";"} - это жесть.
Хотя всё работает я даже создал такой же класс только для строк и через точку с запятой
Терпение, про это будет 11-ый урок )
Артем, new string[] {";"} формируешь массив строк, каждый элемент которого стоит до ";" и после. StringSplitOptions.RemoveEmptyEntries - перечисление, чтобы убрать пустые строки.
Например строка:
string line = "яблоко, груша, помидор; огурец";
в этом случае string[] strings = line.Split(new string[] {";"}, StringSplitOptions.RemoveEmptyEntries);
выдаст массив с двумя строками:
strings[0] = "яблоко, груша, помидор";
strings[1] = "огурец";
так же можно не формировать строковый массив, а сразу присваивать строковой переменной значение i-того элемента, разделяя исходную строку "налету".
Строка из предыдущего примера.
string s = line.Split(new string[] {";"}, StringSplitOptions.RemoveEmptyEntries)[1];
Значение s в этом случае будет равно "огурец".
Подсмотрел тут msdn.microsoft.com/en-us/library/system.collections.ienumerable(v=vs.110).aspx
Но вот чёткое понимания что это значит
IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator) GetEnumerator();
}
не сказал бы что есть
ДЕВЯНОСТО ПЯТЫЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА
Не упомянули массив массивов, а также ограничения на объём памяти, занимаемой массивом, например при обработке изображений/видеопотока, что актуально становится сегодня.
В примере с IEnumerable и арифметической прогрессией, если я не ошибаюсь, неправильно составлено выражение для члена последовательности, поправьте меня, если я не прав, пожалуйста.
ура я 16001 подписчик))
Плиз выложите на дробокс или гугдрайв примеры ваших уроков
В удалении: откуда symbolPosition получил позицию символа?
ДЕВЯНОСТЫЙ КОММЕНТАРИЙ
Когда происходит вызов, например метода Reset?
Тогда, когда необходимо начать итерацию с начала.
У меня маленький вопрос - так ли необходимо постоянно писать private? Если не ошибаюсь, созданное внутри класса без модификатора доступа по умолчанию приватное (локальное) - те же иногда многочисленные переменные, поля.
Дело привычки, мне удобнее, когда модификатор указан явно.
СОТЫЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА
Короче вначале ролика, встаю в 5 часов утра, чтобы послушать лекции, а тут тратим время на объявления.
Добрый день.
Как с вами можно связаться?
Про паттерны будешь снимать?
Несколько уже было, см. Наследование и полиморфизм и Пример создания приложения.
Про некоторые другие - возможно.
ДЕВЯНОСТО ДЕВЯТЫЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА
ДЕВЯНОСТО СЕДЬМОЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА
ВОТ ТЕПЕРЬ УЖЕ СОТЫЙ
ДЕВЯНОСТО ЧЕТВЕРТЫЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА
Это действительно сложно или сегодня просто не мой день?
ДЕВЯНОСТО ШЕСТОЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА
даёт эту ошибку: using the generic type 'System.Collections.Generic.IEnumerator ' requires 1 type arguments
что делать???
добавь using System.Collections. System.CollectionsGeneric - IEnumerator , а System.Collections - IEnumerator.
У меня выдает какие-то ошибки!
Пишет,что интерфейс не имплиментирован!
Error 1 'ConsoleApplication1.Progression' does not implement interface member 'System.Collections.Generic.IEnumerable.GetEnumerator()'
Что это значит???
Я же все делаю по уроку...
Видимо не всё ) В классе Progression есть public-метод GetEnumerator?
Сори! Я там сделал ошибку в слове.
Сложный этот вижуалстудио.
А ты бы не мог свой скайп мне в личку написать?
Я тоже много чем интересуюсь,изучаю и занимаюсь!
Может я тебе тоже чего-то подскажу и помогу!
Ты не против?
Я с шарп начал изучать,чтобы игры на юнити3д делать!
Наймит США Увы, я не занимаюсь разработкой на Unity
Defazze я так и не понял о yield...
Эээ... А может и понял.
С ним не нужно создавать нового класса с описанием IEnumerator-ских методов ибо он уже их содержит.Так?
А есть ситуации где без yield не катит? Или всегда можно так заменять?
Про yeld return ничего немпонял
Очень сложная тема, сложно понять
Закон, последовательности описан не правильно. Правильная версия:
Если (n>=1), то n+3;
Если (n==0),то n=1;
у автора всё правильно, так как n - это номер элемента и обозначает позицию элемента в последовательности, то есть словами: элемент в последовательности есть предыдущий элемент плюс три.
ЛАДНО, НЕ СОТЫЙ, ДЕВЯНОСТО ДЕВЯТЫЙ КОММЕНТАРИЙ
ЛАДНО, НЕ СОТЫЙ, ДЕВЯНОСТО ВОСЬМОЙ КОММЕНТАРИЙ
2:48 - множества в си шарп
ДЕВЯНОСТО ПЕРВЫЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА
ДЕВЯНОСТО ТРЕТИЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА