Сбор уникальных элементов
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 68 из 68.
Задание
ЛегкоСоздай систему удаления дубликатов, использующую идиоматический для Go шаблон множества для отбора уникальных элементов из коллекций строк. Это задание проверит твоё умение использовать идиому map[string]struct{} для отслеживания уже встреченных элементов и создания коллекций, содержащих только уникальные элементы.
Тебе будут предоставлены два входных значения:
- Строка, содержащая элементы, разделённые запятыми (например,
"apple,banana,apple,orange,banana,grape,apple") - Строка с дополнительными элементами для объединения, также разделёнными запятыми (например,
"kiwi,apple,mango,banana,kiwi")
Твоя задача:
- Создать функцию с именем
getUniqueItems, которая принимает срез строк и возвращает новый срез, содержащий только уникальные строки - Внутри этой функции использовать идиому
map[string]struct{}для отслеживания элементов, которые уже встречались - Перебрать входной срез и для каждого элемента:
- Проверить, существует ли элемент в твоём множестве, используя идиому comma-ok
- Если элемент ещё не встречался, добавить его и в множество, и в результирующий срез
- Разобрать первый ввод, разделив его по запятым, чтобы получить исходный список элементов
- Разобрать второй ввод, разделив его по запятым, чтобы получить дополнительные элементы
- Вывести заголовок системы:
"=== UNIQUE ITEM COLLECTOR ===" - Вывести исходные элементы:
"Original items: [comma-separated list of all original items]" - Вывести дополнительные элементы:
"Additional items: [comma-separated list of all additional items]" - Использовать функцию
getUniqueItems, чтобы получить уникальные элементы из исходного списка - Вывести уникальные исходные элементы:
"Unique original items: [comma-separated list of unique items from original list]" - Объединить оба входных среза в один срез, содержащий все элементы
- Использовать функцию
getUniqueItems, чтобы получить уникальные элементы из объединённого списка - Вывести итоговые уникальные элементы:
"Final unique items: [comma-separated list of all unique items]" - Вывести статистику коллекции:
"=== COLLECTION STATISTICS ===""Total original items: [count of original items]""Total additional items: [count of additional items]""Total combined items: [count of all items combined]""Unique items found: [count of unique items]""Duplicates removed: [total combined items minus unique items]"
- Вывести сообщение о завершении:
"Unique item collection completed successfully"
Используй пакет strings для разделения входных строк и пакет fmt для вывода. При объединении элементов для вывода используй strings.Join с запятой в качестве разделителя. Это задание показывает, как идиома множества в Go эффективно решает распространённую задачу удаления дубликатов из коллекций — этот шаблон ты будешь часто использовать в приложениях для обработки данных.
Попробуйте сами
package main
import (
"fmt"
"strings"
)
func main() {
// Считайте входные данные
var input1 string
var input2 string
fmt.Scanln(&input1)
fmt.Scanln(&input2)
// Разбейте входные строки на срезы
originalItems := strings.Split(input1, ",")
additionalItems := strings.Split(input2, ",")
// TODO: Напишите здесь свой код
// 1. Создайте функцию getUniqueItems, использующую идиому map[string]struct{}
// 2. Обработайте исходные элементы, чтобы получить уникальные элементы
// 3. Объедините оба среза и получите уникальные элементы из объединённого списка
// 4. Вычислите статистику
// Выведите заголовок системы
fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
// Выведите исходные и дополнительные элементы
fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
// TODO: Выведите уникальные исходные элементы, итоговые уникальные элементы и статистику
// Используйте fmt.Printf и strings.Join для форматирования вывода
}Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком
Оператор switch с `fallthrough`Выход из вложенных цикловПереход к следующей итерации конкретного циклаОператор `goto`Повторение: расширенное управление циклами4Проект: простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели-значенияПолучатели-указателиВыбор получателейМетоды и функцииПовторение: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картПовторение — счётчик частоты слов8Проект: простой складской учёт
Обзор проектаПроверка запасов3Интерфейсы (основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование типов интерфейсовПустой интерфейсУтверждения типовПереключатель типовПовторение — формы и поведениеПотренируйтесь самостоятельно: Онлайн-компилятор Go