Нам повторы не нужны

  • 10
  • Недоступна
Сложно представить себе ситуацию, в которой может понадобиться программа, которую мы предлагаем вам написать. Впрочем, маленькая модификация, и она обретает практический смысл. Также её можно представить частью чего-то большего (поиска?). Давайте создим словарь, занесём в него записи по принципу «фамилия» - «имя» и удалим людей с одинаковыми именами.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (814)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Похабов Иван Руководитель отдела 1с в одна управляющая ком
19 августа, 21:02
Вот такой вариант, создаем два сета, обходим наш мап, пытаемся добавлять в первый сет, т.к. значения в сете уникальные, то второй раз добавить в сет дубль имени не получится, значит добавляем во второй сет. Т.о. во втором себе будут только дубли. if (!tracking.add(name)) { // Пытаемся засунть в первый сет duplicates.add(name); // Тут будут дубли }
30 июля, 14:03
Может кому поможет вдруг... Сначала пытался решить задачу при помощи итераторов - сломал себе голову. В комментариях увидел упоминание foreach и map.values() - много думал. В результате создал новый Map, где name это ключ, а значение - дубликат/не дубликат.
Евгений N
Уровень 13
14 апреля, 07:54
а нужно удалить и оригинал (если у него есть дубликаты) и дубликаты? или только дубликаты? т.е. если у меня два Dunkan, то должен остаться один или ноль?
Евгений N
Уровень 13
14 апреля, 09:59
судя по решению нужно удалять и оригинал (если у него есть копии) и копии. стандартное решение: пробегаем map 1000 раз (NxN в "нашем" методе и xN в методе удаления). имхо, можно и поменьше бегать (да и без копирования обошелся), итого, в "нашем" методе: - вместо копии map заводим пустой Set - заводим while (по факту будет работать столько раз, сколько удалений) - в while цикл2: бегаем по map: если элемента нет в set - добавляем, если есть: выходим из цикла2 (т.е. при первом же дубле, а не бегаем и считаем их всех), вызываем удаление (1 раз для значения, а в "решении" - столько раз сколько дублируется!), очищаем set, продолжаем цикл while. если цикл 2 полностью пройден (без досрочного выхода) - выходим и из цикла while.
Dmitry Vasilyev
Уровень 12
12 апреля, 18:58
Сделал копию Map в методе (removeTheFirstNameDuplicates), пробежался по всем элементам копии. Каждый элемент копии удалял из основного map по ключу и значению. После этого проверял наличие имени данного элемента в основном map (contains()), если оставались ещё, применял метод удаления всех значений, если нет - возвращал обратно.
Firs02
Уровень 10
23 февраля, 21:21
Решал задачи все быстро, наткнулся на эту и встал по полной программе. Не выдержал и посмотрел решение. Для меня было открытие что через FOReach можно было просто вызывать map.values и класть все это в String. Это действительно упрощает решение задач связанные с мапами.
Anonymous #733630
Уровень 8
16 февраля, 16:54
Объясните, пожалуйста, зачем всегда создавать копию словаря Map<String, String> для операций внутри циклов?
Tesla EXV
Уровень 14
12 апреля, 08:51
Потому что невозможно, используя расширенный for, перебирать элементы словаря и одновременно их модифицировать(например, удалять). Поэтому перебор происходит по копии, а, например, удаление элементов - уже из оригинального словаря. Если не хочется плодить копии словарей, то можно использовать Iterator. Данная тема была хорошо раскрыта в одной из предыдущих задач "Больше 10? Вы нам не подходите 8 уровень 8 лекция". Советую решить ее и почитать комментарии под задачей.
SanGali
Уровень 16
12 февраля, 22:41
Вывел values в ArrayList, прогнал через вложенный цикл, удаляя дубликаты вызовом предложенной функции. Приятная задачка) Пришлось почитать. Много))
Денис
Уровень 23
8 февраля, 14:59
Решил с помощью ArrayList, добавил в него имена и проверял их по очереди, решил конечно не без помощи, пришлось задавать вопросы.
Andrew
Уровень 16
24 января, 08:27
в готовом решении в каждом из методов создается копия мапы, не слишком ли это затратно по ресурсам?
Iv@n
Уровень 12
18 января, 14:04
Я понял только одно - foreach рулит!!! Ну и Iterator тоже не плох😉