Проверка наличия элемента
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 34 из 68.
Теперь, когда ты умеешь добавлять элементы в множество, следующая важная операция — проверка того, существует ли определённый элемент в множестве. Здесь идиома Go «comma ok» становится невероятно полезной.
Чтобы проверить, существует ли элемент в вашем наборе, используйте такой же синтаксис, как при проверке наличия ключа в map:
_, 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, чтобы обеспечить преимущества производительности настоящей структуры данных множества.
Задание
ЛегкоСоздай систему verification участников team, которая проверяет, входят ли определённые люди в team проекта, используя идиому множества Go. Эта задача демонстрирует, как использовать идиому comma ok для проверки членства в множестве.
Тебе будут предоставлены два входных значения:
- Значение типа string, содержащее участников team, разделённых запятыми (например,
"Alice,Bob,Charlie,Diana,Eve") - Значение типа string, содержащее людей для проверки, разделённых запятыми (например,
"Bob,Frank,Alice,Grace,Charlie")
Твоя задача:
- Create множество с использованием идиомы Go
map[string]struct{}, чтобы хранить участников team - Parse первое входное значение, разделив его по запятым, чтобы получить отдельные имена участников team
- Add каждого участника team в своё множество, используя литерал пустой структуры
{}в качестве значения - Parse второе входное значение, разделив его по запятым, чтобы получить список людей для verification
- Для каждого проверяемого человека используй идиому comma ok
_, ok := teamSet[person], чтобы проверить членство - Display results verification для каждого проверяемого человека:
- Если человек входит в team:
"[person] is on the team" - Если человек не входит в team:
"[person] is not on the team"
- Если человек входит в team:
- После проверки всех людей Display summary:
"Team size: [team_member_count]""People checked: [people_checked_count]""Team members found: [found_count]""Non-team members: [not_found_count]"
Используй пакет strings, чтобы разделить входные значения string по запятым. Эта задача демонстрирует, как идиома 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
// Отобразить результаты проверки и сводку
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком выполнения
Switch с использованием `fallthrough`Выход из вложенных цикловПродолжение конкретного циклаОператор `goto`Итоги: Продвинутое управление циклами4Проект: Простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели по значениюПолучатели по указателюВыбор типа получателяМетоды против функцийИтоги: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение6Идиоматичный Go: Множества
Идиома множества в GoСоздание множестваДобавление в множествоПроверка наличия элементаУдаление из множестваИтерация по множествуИтоги — Уникальные имена пользователейПотренируйтесь самостоятельно: Онлайн-компилятор Go