Menu
CoddyTech

Объединение и пересечение

Часть раздела Логика и потоки выполнения путешествия по 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() — это [].

challenge icon

Задание

Легко

Каждый из двух игроков разблокировал несколько навыков. Программа считывает две строки: навыки первого игрока и навыки второго игрока, разделённые пробелами, а начальный код создает множества 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

	# Постройте объединение и пересечение

	# Выведите результаты
quiz iconПроверьте себя

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

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор GDScript