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#. Типы данных.

Комментарии • 104

  • @user-tx2yt8ml9v
    @user-tx2yt8ml9v 9 лет назад +71

    продолжайте, не останавливайтесь ни в коем случае!!! У вас замечательные уроки!

  • @alexalexander3252
    @alexalexander3252 Год назад +1

    У вас одни из самых лучших уроков на ютубе. Не останавливайтесь.

  • @bersagiev8233
    @bersagiev8233 2 года назад

    Интерес есть, хотелось чтобы вы продолжили свою работу))) Удачи ВАМ!!!

  • @Warox42
    @Warox42 8 лет назад +12

    Очень нравятся твои уроки, после просмотра не остается непонятных моментов или вопросов.. почему именно так, или других.
    я рад, что мне удалось найти твой канал именно сейчас. Спасибо мужик!

  • @user-qx8nm5ts3b
    @user-qx8nm5ts3b 6 лет назад +3

    Просто нету слов. Насколько всё понятно и грамотно. Спасибо большое!!!

  • @aydinashurov2263
    @aydinashurov2263 5 лет назад +1

    У Вас прекрасные видео уроки, я перекопал весь русскоязычный интернет и скажу, что вы для меня лучший среди лучших. Продолжайте, прошу вас. Для меня это как хобби, я изучаю язык C#, для себя и вы дали мне многое в понимание ООП. Буду ждать ваших новых уроков. Спасибо Вам огромное, за ваш труд.

  • @UncleAlexKun
    @UncleAlexKun 9 лет назад +6

    Спасибо автору за уроки, смотрю всего 9 урок и понимаю на сколько я поверхностно знал возможности платформы dotNET.

  • @special4you1
    @special4you1 7 лет назад +4

    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.

  • @Defazze
    @Defazze  10 лет назад +41

    Занятие по реальному приложению в планах есть, скорее всего - по окончанию изучения LINQ. Я только еще не совсем определился с форматом.

    • @SnowsoftblogBlogspotSpirit
      @SnowsoftblogBlogspotSpirit 10 лет назад +1

      vk.com/snowsoft

    • @lllraytoxlll
      @lllraytoxlll 3 года назад

      вы помогли моему брату в свое время и теперь он работает в крупной компании. А теперь помогаете мне. Жаль что я не настолько развит в программировании и многое не понятно. Но по 4-8 заходов по кругу помогают освоить материал. А без ваших видео я бы и вовсе сдулся, так как на метаните чем дальше в лес, тем меньше дров

  • @yevgenylevin8381
    @yevgenylevin8381 7 лет назад +2

    Один из самых лучших курсов в сети !!! ;)

  • @stasterletskiy4368
    @stasterletskiy4368 4 года назад

    Это просто шедеврально !!!

  • @kauchuk-22
    @kauchuk-22 9 лет назад +1

    Отличный урок, большое спасибо!

  • @katemishina1813
    @katemishina1813 9 лет назад +3

    Очень замечательные уроки)) Спасибо большое))

  • @iuleakunei
    @iuleakunei 9 лет назад +1

    Замечательные уроки. Спасибо автору.

  • @user-lt7cf5qq8j
    @user-lt7cf5qq8j 7 лет назад

    Прекрасные уроки. Пожалуйста продолжайте.

  • @fred20659
    @fred20659 3 года назад

    Лучшие видеоуроки!!!

  • @user-mn8nr4ib5x
    @user-mn8nr4ib5x 9 лет назад +4

    Клевые уроки, прочитал сначала рихтера и шилда, но все равно многие моменты понял только в ваших уроках. Спасибо!

  • @den3v
    @den3v 8 лет назад +1

    Наверное, хотя что там наверное - лучшие видео уроки которые я видел! Спасибо огромное

  • @rasimismatulin1400
    @rasimismatulin1400 8 лет назад

    Просто, доступно. Спасибо

  • @seastraus1
    @seastraus1 7 лет назад

    Очень интересные уроки. Для меня просто находка. Большое спасибо.

  • @smartred55
    @smartred55 10 лет назад

    Огромное спасибо Вам за данный курс.
    Очень хорошо, что Вы не закончили свои уроки.

  • @boraborat
    @boraborat 9 лет назад

    Довольно глубоко и интересно. Раньше даже не задумывался как именно работают методы в List или ArrayList.

  • @yakovga
    @yakovga 4 года назад

    Спасибо вам большое за ваш труд

  • @user-lucky3337
    @user-lucky3337 6 лет назад

    Уроки классные! Лайк и подписка.

  • @DarthVader100500
    @DarthVader100500 5 лет назад

    Очень грамотное объяснение, как и все предыдущие. Больше Вам спасибо!!!

  • @yz777zhumabayev6
    @yz777zhumabayev6 Год назад

    Спасибо за инфу!!

  • @artemyazynin2975
    @artemyazynin2975 10 лет назад

    Спасибо, полезно повторить

  • @alexandermorozov6810
    @alexandermorozov6810 2 года назад

    Спасибо! Все очень толково и без лишнего. Я имея опыт работы, решил доучить все же Шарп :) вот, смотрю Ваши видео с огромным удовольствием!

  • @student6842
    @student6842 3 года назад +1

    2:43 Начало. Множества. Последовательность IEnumerable.
    21:24 ICollection
    Спасибо.

  • @elvinnasibov755
    @elvinnasibov755 6 лет назад

    Канал довольно хорош!)

  • @viktorsoltis
    @viktorsoltis 8 лет назад

    Касательно скрытия реализации методов путем явной реализации.
    Если привести ваш StoreCollection к типу ICollection - метод Add будет доступен.
    ICollection collection = new StoreCollection("");
    collection.Add(1);
    тоесть такая запись будет валидной и в коллекцию всё равно можно будет добавить новый елемент.

  • @victorburuyan1691
    @victorburuyan1691 6 лет назад

    Хороший материал

  • @cityedit
    @cityedit 6 лет назад

    Класс

  • @NatuNuarat
    @NatuNuarat 8 лет назад

    Такие сложные темы и всё понятно (сравниваю с Троелсеном)
    Спасииииибо (/◕ヮ◕)/

  • @SULTANVIDEOGAMES
    @SULTANVIDEOGAMES 5 лет назад +2

    int current = 1;
    for (int i = 0; i < _itemCount; i++)
    {
    if (i > 0) current += 3;
    yield return current;
    }
    так все же корректней

  • @na-ms1xf
    @na-ms1xf 3 года назад

    На 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;

  • @cheguevara1260
    @cheguevara1260 8 лет назад

    Оу "Крестный отец"- топчик))

  • @VitaliyZlobin
    @VitaliyZlobin 4 года назад

    Про метод Contains добавлю, что лучше завести переменную string и в неё положить искомое число в виде строки, тогда не придётся парсить строку в число на каждой итерации.

  • @halfbelf5923
    @halfbelf5923 6 лет назад

    я бы расколол твой урок на несколько частей, где в каждой теме мы рассматриваем по чуть-чуть, очень информативное видео, но я бы сказал, что очень много :) все равно спасибо.

  • @sergbo5509
    @sergbo5509 8 лет назад

    Может я и придираюсь, но мне кажется что метод Contains логичнее было реализовать подругому. Вместо того что бы каждый элемент преобразовывать в число и потом сверять, быстрее мне кажется наоборот. Преобразовать INT в строку и потом сравнивать. Хотя на качество урока это не влияет. Все как всегда на высоте!)))

  • @seriga3
    @seriga3 8 лет назад +2

    По поводу примера реализации класса Dictionary
    Я вижу тут избыточность. Поправьте меня если я не прав.
    Мы передаем “Id” в качестве первого параметра множества и в качестве элемента множества в составе объекта класса “Person”. Достаточно же передать “Id” в качестве ключа, а Name в качестве элемента множества?

  • @andrgun
    @andrgun 10 лет назад +1

    Спасибо за уроки! Все очень нравится и понятно изложено
    .Нет ли у Вас в планах создать еще один урок посвященный созданию реального приложения? Лично для меня такие уроки нагляднее всего объясняют и способствуют пониманию языка.

  • @_kul879
    @_kul879 2 года назад

    Спасибо, что после ваших уроков в голове наводится порядок! Зря вы не стали рассказывать подробнее про foreach механизм, возможно чуть яснее стало бы про IEnumerable (это одна из магических тем для понимания). И лекции до 1 часа (включительно) вполне оптимальны по времени.

  • @user-kz3tm8bw5w
    @user-kz3tm8bw5w 7 лет назад +1

    спасибо большое за видео уроки!!!
    здорово что я вас нашла когда вы уже отсняли много уроков. можно в захлёп посмотреть.
    а вы планируете ещё делать какие нибудь видео уроки?

  • @salamatturdukhodzhaev7486
    @salamatturdukhodzhaev7486 4 года назад +1

    Спасибо за уроки. Я только начинаю изучать программирование, поэтому вопрос будет моего уровня) Когда создали экземпляр класса Progression и в параметр конструктора передали число, далее через цикл foreach проходим по каждому элементу. Как вызывается метод GetEnumerator который возвращает тип ProgressionIterator и далее идет вызовы MoveNext и Current. Как это происходит, если мы их не вызывали?

  • @user-ok9gu1ev6j
    @user-ok9gu1ev6j 7 лет назад

    большое спасибо за хорошие уроки!
    один нюанс в классе StoreCollection не удаляет если это последний элемент - как раз новички могут попробовать реализовать для практики как это сделать

    • @user-ok9gu1ev6j
      @user-ok9gu1ev6j 7 лет назад

      сокрытие методов работает не всегда, а только при добавление элементов(других вариантов я не увидела, хотя не исключено, я только новичок) вот такой код к примеру работает нормально:
      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]);
      но наверно такой способ поиска номера элемента не приветствуется?

  • @artemio150
    @artemio150 10 лет назад

    Вопрос по классу class StoreCollection : ICollection
    ты там рассматриваешь все члены, но кроме
    IEnumerator IEnumerable.GetEnumerator()
    вот для меня не очень понятно почему во-первых метод через точку назван
    ну и что там в нём тоже интересно и зачем он

    • @Defazze
      @Defazze  10 лет назад +1

      Это необобщенная явная реализация интерфейса IEnumerable. См. урок про обобщения и урок про интерфейсы. Интерфейс IEnumerable включает в себя интерфейс IEnumerable, поэтому его необходимо реализовывать. Но чтобы он не мешался под ногами, его реализовывают явно.

  • @user-md8ho3rq9g
    @user-md8ho3rq9g 8 лет назад +2

    с 14 минуты. многократный вызов метода MoveNext постоянно изменяет значение _current, даже если метод возвращает false и мы превысили _itemCount значение _current будет меняться. В свою очередь последующий вызов метода Current вернет не верное значение.

  • @artemyazynin2975
    @artemyazynin2975 10 лет назад +2

    Вообще чтобы более хорошо понимать принцип реализации множеств лучше напрсать свои реализации каждого интерфейса

    • @Defazze
      @Defazze  10 лет назад

      это да, к сожалению, в рамках одного урока рассказать еще и о реализации IList и Dictionary невозможно, поэтому пусть это будет своего рода самостоятельное упражнение.

  • @SenomSnK
    @SenomSnK 10 лет назад

    Урок хороший, жаль, что видео выходят очень редко.

  • @uralfansoft
    @uralfansoft 3 года назад

    насколько я знаю, в паскале можно делать пересечение, разность и объединение множеств, как это делается в C#? Или нужно придумывать свой метод для этих операций?

  • @Werez777
    @Werez777 9 лет назад +8

    Почему на 18 минуте Вы говорите о переполнении стека, ведь значения нигде не хранятся, массива нет, а только задано правило вычисления значения "следующего элемента", который в памяти хранится только до вычисления "следующего элемента". Или я чего-то не понимаю? Спасибо

    • @user-fo6bh8lp9s
      @user-fo6bh8lp9s 7 лет назад +2

      Стек кончится, потому что фактически все элементы последовательности сохраняются, в кишках цикла foreach.

    • @yevhenbadorov7961
      @yevhenbadorov7961 5 лет назад +1

      Стек не переполнится, ведь мы ничего не храним и не выполняем рекурсивных вызовов методов. А вот int может запросто переполниться

  • @user-hv3sf9wg5c
    @user-hv3sf9wg5c 6 лет назад

    Успел посмотреть только многопоточность. Хотелось бы кроме прикладного аспекта, немного подробнее о теории. В связке с Рихтером ваши лекции очень хороши. Они здорово дополнили друг друга и все стало понятнее. Но использовать какой-то один источник, данные получаются не полные или как в случае с Рихтером, очень тяжёлые в понимании.

  • @SkibidiEugensson
    @SkibidiEugensson 10 лет назад +1

    Является ли правильным каждый раз вызывать GetNumbers() который читает из файла и возвращает массив, вместо того чтобы сделать приватный массив и загрузить его единожды перед использованием экземпляра коллекции?

  • @volodyaDikiy
    @volodyaDikiy 2 года назад

    ДЕВЯНОСТО ПЕРВЫЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА

  • @artemio150
    @artemio150 10 лет назад

    и эту строчку если можно прокомментируйте
    string[] strings = line.Split(new string[] {";"}, StringSplitOptions.RemoveEmptyEntries);
    это относится более наверное к синтаксису.
    Но она уж больно наворочена.
    Вот допустим - new string[] {";"} - это жесть.
    Хотя всё работает я даже создал такой же класс только для строк и через точку с запятой

    • @Defazze
      @Defazze  10 лет назад +1

      Терпение, про это будет 11-ый урок )

    • @semyonzakurdaev8385
      @semyonzakurdaev8385 10 лет назад +2

      Артем, 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 в этом случае будет равно "огурец".

  • @artemio150
    @artemio150 10 лет назад +1

    Подсмотрел тут msdn.microsoft.com/en-us/library/system.collections.ienumerable(v=vs.110).aspx
    Но вот чёткое понимания что это значит
    IEnumerator IEnumerable.GetEnumerator()
    {
    return (IEnumerator) GetEnumerator();
    }
    не сказал бы что есть

  • @volodyaDikiy
    @volodyaDikiy 2 года назад

    ДЕВЯНОСТО ПЯТЫЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА

  • @MikeAbdulla
    @MikeAbdulla 9 лет назад

    Не упомянули массив массивов, а также ограничения на объём памяти, занимаемой массивом, например при обработке изображений/видеопотока, что актуально становится сегодня.

  • @Brometey
    @Brometey 2 года назад

    В примере с IEnumerable и арифметической прогрессией, если я не ошибаюсь, неправильно составлено выражение для члена последовательности, поправьте меня, если я не прав, пожалуйста.

  • @javagraf2753
    @javagraf2753 7 лет назад

    ура я 16001 подписчик))

  • @A.M.8181
    @A.M.8181 9 лет назад

    Плиз выложите на дробокс или гугдрайв примеры ваших уроков

  • @user-nw4vo7kw9j
    @user-nw4vo7kw9j 9 лет назад

    В удалении: откуда symbolPosition получил позицию символа?

  • @volodyaDikiy
    @volodyaDikiy 2 года назад

    ДЕВЯНОСТЫЙ КОММЕНТАРИЙ

  • @borishere1
    @borishere1 10 лет назад

    Когда происходит вызов, например метода Reset?

    • @Defazze
      @Defazze  10 лет назад

      Тогда, когда необходимо начать итерацию с начала.

  • @user-xe3dj6bh6v
    @user-xe3dj6bh6v 10 лет назад

    У меня маленький вопрос - так ли необходимо постоянно писать private? Если не ошибаюсь, созданное внутри класса без модификатора доступа по умолчанию приватное (локальное) - те же иногда многочисленные переменные, поля.

    • @Defazze
      @Defazze  10 лет назад +4

      Дело привычки, мне удобнее, когда модификатор указан явно.

  • @volodyaDikiy
    @volodyaDikiy 2 года назад

    СОТЫЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА

  • @AndriiNikolaiev
    @AndriiNikolaiev 6 лет назад

    Короче вначале ролика, встаю в 5 часов утра, чтобы послушать лекции, а тут тратим время на объявления.

  • @stasonsv52
    @stasonsv52 3 года назад

    Добрый день.
    Как с вами можно связаться?

  • @artemyazynin2975
    @artemyazynin2975 10 лет назад

    Про паттерны будешь снимать?

    • @Defazze
      @Defazze  10 лет назад

      Несколько уже было, см. Наследование и полиморфизм и Пример создания приложения.
      Про некоторые другие - возможно.

  • @volodyaDikiy
    @volodyaDikiy 2 года назад

    ДЕВЯНОСТО ДЕВЯТЫЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА

  • @volodyaDikiy
    @volodyaDikiy 2 года назад

    ДЕВЯНОСТО СЕДЬМОЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА

  • @volodyaDikiy
    @volodyaDikiy 2 года назад

    ВОТ ТЕПЕРЬ УЖЕ СОТЫЙ

  • @volodyaDikiy
    @volodyaDikiy 2 года назад

    ДЕВЯНОСТО ЧЕТВЕРТЫЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА

  • @user-ch7hx8fh6k
    @user-ch7hx8fh6k 5 лет назад +1

    Это действительно сложно или сегодня просто не мой день?

  • @volodyaDikiy
    @volodyaDikiy 2 года назад

    ДЕВЯНОСТО ШЕСТОЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА

  • @duwangchew
    @duwangchew 10 лет назад

    даёт эту ошибку: using the generic type 'System.Collections.Generic.IEnumerator ' requires 1 type arguments
    что делать???

    • @semyonzakurdaev8385
      @semyonzakurdaev8385 10 лет назад

      добавь using System.Collections. System.CollectionsGeneric - IEnumerator , а System.Collections - IEnumerator.

  • @direktorukraini
    @direktorukraini 9 лет назад

    У меня выдает какие-то ошибки!
    Пишет,что интерфейс не имплиментирован!
    Error 1 'ConsoleApplication1.Progression' does not implement interface member 'System.Collections.Generic.IEnumerable.GetEnumerator()'
    Что это значит???
    Я же все делаю по уроку...

    • @Defazze
      @Defazze  9 лет назад

      Видимо не всё ) В классе Progression есть public-метод GetEnumerator?

    • @direktorukraini
      @direktorukraini 9 лет назад

      Сори! Я там сделал ошибку в слове.
      Сложный этот вижуалстудио.
      А ты бы не мог свой скайп мне в личку написать?
      Я тоже много чем интересуюсь,изучаю и занимаюсь!
      Может я тебе тоже чего-то подскажу и помогу!
      Ты не против?
      Я с шарп начал изучать,чтобы игры на юнити3д делать!

    • @Defazze
      @Defazze  9 лет назад

      Наймит США Увы, я не занимаюсь разработкой на Unity

    • @direktorukraini
      @direktorukraini 9 лет назад

      Defazze я так и не понял о yield...
      Эээ... А может и понял.
      С ним не нужно создавать нового класса с описанием IEnumerator-ских методов ибо он уже их содержит.Так?
      А есть ситуации где без yield не катит? Или всегда можно так заменять?

  • @Graver24
    @Graver24 4 года назад

    Про yeld return ничего немпонял

  • @_goldmanv5925
    @_goldmanv5925 11 месяцев назад

    Очень сложная тема, сложно понять

  • @user-fo6bh8lp9s
    @user-fo6bh8lp9s 7 лет назад +1

    Закон, последовательности описан не правильно. Правильная версия:
    Если (n>=1), то n+3;
    Если (n==0),то n=1;

    • @TanyaPastel
      @TanyaPastel 6 лет назад

      у автора всё правильно, так как n - это номер элемента и обозначает позицию элемента в последовательности, то есть словами: элемент в последовательности есть предыдущий элемент плюс три.

  • @volodyaDikiy
    @volodyaDikiy 2 года назад

    ЛАДНО, НЕ СОТЫЙ, ДЕВЯНОСТО ДЕВЯТЫЙ КОММЕНТАРИЙ

  • @volodyaDikiy
    @volodyaDikiy 2 года назад

    ЛАДНО, НЕ СОТЫЙ, ДЕВЯНОСТО ВОСЬМОЙ КОММЕНТАРИЙ

  • @user-ql9ye5mx6u
    @user-ql9ye5mx6u 3 месяца назад

    2:48 - множества в си шарп

  • @volodyaDikiy
    @volodyaDikiy 2 года назад

    ДЕВЯНОСТО ПЕРВЫЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА

  • @volodyaDikiy
    @volodyaDikiy 2 года назад

    ДЕВЯНОСТО ТРЕТИЙ КОММЕНТАРИЙ ДЛЯ РАЗВИТИЯ КАНАЛА