Сборщик уникальных элементов
Часть раздела Логика и управление потоком путешествия по GO на Coddy — урок 68 из 68.
Задание
ЛегкоСоздайте систему удаления дубликатов, которая использует идиоматичный для Go паттерн «множество» (set) для фильтрации уникальных элементов из коллекций строк. Это задание проверит ваше умение использовать идиому 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Сравнение картИтоги: счетчик частоты слов3Интерфейсы (Основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование интерфейсных типовПустой интерфейсУтверждение типаПереключатель типовИтоги: Фигуры и поведение