Объединение и пересечение
Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 34 из 78.
Два множества можно объединить двумя распространёнными способами:
- Объединение содержит все элементы, которые есть хотя бы в одном из множеств.
- Пересечение содержит только элементы, которые есть в обоих множествах.
В GDScript нет операторов для этих операций, поэтому их нужно реализовать с помощью циклов. Чтобы получить объединение, добавь элементы обоих множеств в новое множество. Элемент, присутствующий в обоих множествах, попадёт в один и тот же ключ:
var mia := {"forest": true, "cave": true}
var leo := {"cave": true, "tower": true}
var either := {}
for place in mia:
either[place] = true
for place in leo:
either[place] = true
print(either.keys()) # ["forest", "cave", "tower"]Поскольку каждое значение равно true, merged() возвращает то же объединение за один вызов: var either := mia.merged(leo). Он возвращает новый словарь и оставляет mia без изменений.
Чтобы найти пересечение, перебери одно множество и оставь элементы, которые есть в другом множестве:
var both := {}
for place in mia:
if leo.has(place):
both[place] = true
print(both.keys()) # ["cave"]Если множества не имеют общих элементов, их пересечение пусто, а both.keys() — это [].
Задание
ЛегкоКаждый из двух игроков разблокировал несколько навыков. Программа считывает две строки: навыки первого игрока и навыки второго игрока, разделённые пробелами, а начальный код создает множества first и second.
Выведите объединение и пересечение двух множеств, разделяя элементы с помощью , :
All skills:и далее объединение: навыки первого игрока, затем новые навыки второго игрокаShared skills:и далее пересечение в порядке следования навыков первого игрока илиnone, если у них нет общих навыков
Для входных данных:
jump dash
dash swimвывод будет таким:
All skills: jump, dash, swim
Shared skills: dashПопробуйте сами
extends Node
func _ready():
var first := {}
for skill in OS.read_string_from_stdin().split(" ", false):
first[skill] = true
var second := {}
for skill in OS.read_string_from_stdin().split(" ", false):
second[skill] = true
# Постройте объединение и пересечение
# Выведите результаты
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки: углублённое изучение
Методы строкПоиск в строкахЗамена и обрезка пробеловРазделение и объединениеПовторение — проверка имени пользователя4Словари. Часть 2
Вложенные словариМассивы словарейОбъединение словарейКопирование словарейПовторение — подсчёт частоты10Продвинутые функции
Возврат нескольких значенийЛямбда-функции. Часть 1Лямбда-функции. Часть 2Повторение — сортировка с помощью лямбда-функцииРекурсивные функции. Часть 1Рекурсивные функции. Часть 2Повторение — сумма вложенного массива13Система управления запасами
Обзор проектаДобавление товара2Продвинутое управление ветвлением
Сопоставление с переменнымиУсловия в шаблонахШаблоны массивовШаблоны словарейПроверка принадлежностиИтоги — парсер команд5Приложение «Телефонная книга»
Показать менюДобавить контакт8Менеджер успеваемости студентов
Обзор проектаДобавить студента3Многомерные массивы
Основы двумерных массивовДоступ к элементам двумерного массиваВложенные циклы с двумерными массивамиПовторение: двумерные массивыРваные массивыТипичные шаблоны работы с двумерными массивамиПовторение: игровое поле6Множества и словари
Что такое множество?Словарь как множествоДобавление и удалениеОбъединение и пересечениеРазность множествПовторение — удаление дубликатовПотренируйтесь самостоятельно: Онлайн-компилятор GDScript