Итоги — Уникальные имена пользователей
Часть раздела Логика и управление потоком путешествия по GO на Coddy — урок 37 из 68.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоСоздайте систему регистрации имен пользователей, которая предотвращает дублирование имен, используя идиому множества (set) в Go. Эта задача демонстрирует, как создать надежную систему управления пользователями, обеспечивающую уникальность имен пользователей во всех регистрациях.
Вы получите два входных значения:
- Строка, содержащая существующие имена пользователей, разделенные запятыми (например,
"alice123,bob_dev,charlie2024,diana_codes") - Строка, содержащая новые попытки регистрации имен пользователей, разделенные запятыми (например,
"eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")
Ваша задача:
- Создать множество, используя идиому Go
map[string]struct{}, для хранения зарегистрированных имен пользователей - Разобрать первую входную строку, разделив ее по запятым, чтобы получить существующие имена пользователей
- Добавить каждое существующее имя пользователя в ваше множество, используя литерал пустой структуры
{}в качестве значения - Разобрать вторую входную строку, разделив ее по запятым, чтобы получить новые попытки регистрации
- Для каждой попытки регистрации проверить, существует ли имя пользователя в множестве, используя идиому comma ok
- Отобразить процесс регистрации для каждой попытки:
- Если имя пользователя доступно:
"Registered: [username]"и добавить его в множество - Если имя пользователя уже занято:
"Username taken: [username]"
- Если имя пользователя доступно:
- После обработки всех попыток регистрации вывести подробный отчет:
"Registration Summary:""Initial usernames: [initial_count]""Registration attempts: [attempts_count]""Successful registrations: [successful_count]""Rejected (duplicate): [rejected_count]""Total registered usernames: [total_count]"
- Наконец, перечислить все зарегистрированные в системе имена пользователей:
- Заголовок:
"All registered usernames:" - Каждое имя пользователя на отдельной строке:
"@[username]"
- Заголовок:
Используйте пакет strings для разделения входных строк по запятым. Эта задача демонстрирует, как идиома множества в Go обеспечивает эффективное решение для предотвращения дубликатов в системах регистрации пользователей, гарантируя целостность данных и обеспечивая высокую производительность поиска для проверки имен пользователей.
Попробуйте сами
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
// Чтение входных данных
var existingUsernames string
var newRegistrations string
fmt.Scanln(&existingUsernames)
fmt.Scanln(&newRegistrations)
// Парсинг входных строк
existing := strings.Split(existingUsernames, ",")
attempts := strings.Split(newRegistrations, ",")
// Создание множества (set), используя идиому Go
userSet := make(map[string]struct{})
// TODO: Напишите ваш код ниже
// 1. Добавьте существующие имена пользователей в множество
// 2. Обработайте каждую попытку регистрации
// 3. Выведите результаты регистрации для каждой попытки
// 4. Рассчитайте и выведите сводку
// 5. Выведите список всех зарегистрированных имен пользователей (не забудьте отсортировать для стабильного вывода)
}Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком выполнения
Switch с использованием `fallthrough`Выход из вложенных цикловПродолжение конкретного циклаОператор `goto`Итоги: Продвинутое управление циклами4Проект: Простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели по значениюПолучатели по указателюВыбор типа получателяМетоды против функцийИтоги: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение6Идиоматичный Go: Множества
Идиома множества в GoСоздание множестваДобавление в множествоПроверка наличия элементаУдаление из множестваИтерация по множествуИтоги — Уникальные имена пользователей