Menu
CoddyTech

Проверка наличия элемента

Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 34 из 68.

Теперь, когда ты умеешь добавлять элементы в множество, следующая важная операция — проверка того, содержится ли в множестве определённый элемент. Здесь невероятно полезен идиоматический приём Go «comma ok».

Чтобы проверить, существует ли элемент в вашем множестве, используйте тот же синтаксис, что и для проверки наличия ключа в карте:

_, ok := colors["red"]
if ok {
    fmt.Println("Red is in the set")
} else {
    fmt.Println("Red is not in the set")
}

Подчёркивание _ используется, потому что нас не интересует фактическое значение (которое всегда представляет собой пустую структуру). Нас интересует только логическая переменная ok, которая сообщает нам, существует ли ключ.

Вы также можете использовать этот шаблон непосредственно в операторе if, чтобы сделать код более лаконичным:

if _, exists := colors["blue"]; exists {
    fmt.Println("Blue is in the set")
}

Эта проверка принадлежности быстрая и эффективная: она использует оптимизированную реализацию map в Go, обеспечивая преимущества в производительности настоящей структуры данных «множество».

challenge icon

Задание

Легко

Создайте систему проверки участников команды, которая определяет, входят ли определённые люди в команду проекта, используя идиому множества в Go. В этом задании показано, как использовать идиому comma ok для проверки наличия элемента во множестве.

Вы получите два входных значения:

  • Строку со списком участников команды, разделённых запятыми (например, "Alice,Bob,Charlie,Diana,Eve")
  • Строку со списком людей для проверки, разделённых запятыми (например, "Bob,Frank,Alice,Grace,Charlie")

Ваша задача:

  1. Создать множество с помощью идиомы Go map[string]struct{} для хранения участников команды
  2. Разобрать первую входную строку, разделив её по запятым, чтобы получить имена отдельных участников команды
  3. Добавить каждого участника команды в множество, используя литерал пустой структуры {} в качестве значения
  4. Разобрать вторую входную строку, разделив её по запятым, чтобы получить список людей для проверки
  5. Для каждого проверяемого человека использовать идиому comma ok _, ok := teamSet[person], чтобы проверить его наличие
  6. Вывести результаты проверки для каждого проверяемого человека:
    • Если человек входит в команду: "[person] is on the team"
    • Если человек не входит в команду: "[person] is not on the team"
  7. После проверки всех людей вывести сводку:
    • "Team size: [team_member_count]"
    • "People checked: [people_checked_count]"
    • "Team members found: [found_count]"
    • "Non-team members: [not_found_count]"

Используйте пакет strings, чтобы разделить входные строки по запятым. Это задание демонстрирует, как идиома comma ok обеспечивает безопасный и эффективный способ проверки наличия элемента во множестве Go, возвращая и значение, и логическое значение, указывающее, существует ли ключ.

Попробуйте сами

package main

import (
	"fmt"
	"strings"
)

func main() {
	// Считайте входные данные
	var teamMembersInput string
	var peopleToCheckInput string
	fmt.Scanln(&teamMembersInput)
	fmt.Scanln(&peopleToCheckInput)
	
	// Разберите входные строки
	teamMembers := strings.Split(teamMembersInput, ",")
	peopleToCheck := strings.Split(peopleToCheckInput, ",")
	
	// TODO: Напишите свой код ниже
	// Создайте множество с помощью map[string]struct{}
	// Добавьте членов команды в множество
	// Проверьте каждого человека с помощью идиомы comma ok
	// Выведите результаты проверки и сводку
	
}
quiz iconПроверьте себя

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

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

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