Set에서 제거하기
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 35번째.
때때로 집합(set)에서 요소를 제거해야 할 때가 있으며, Go에서는 내장된 delete() 함수를 사용하여 이를 간단하게 처리할 수 있습니다. 집합은 실제로 내부적으로 맵(map)이기 때문에, 요소를 제거하는 것은 맵에서 키를 제거하는 것과 정확히 동일하게 작동합니다.
세트에서 요소를 제거하려면 세트와 제거하려는 요소를 delete() 함수와 함께 사용하세요:
delete(colors, "red")delete() 함수는 두 개의 매개변수를 받습니다: 맵(사용자의 세트)과 제거하려는 키입니다. 요소가 세트에 존재하면 제거됩니다. 요소가 존재하지 않으면 함수는 아무 작업도 수행하지 않으며 오류가 발생하지 않습니다.
이 동작은 집합(sets)에 완벽합니다. 왜냐하면 처음에 요소가 있었는지 여부와 관계없이 요소가 존재하지 않음을 보장하고 싶은 경우가 많기 때문입니다. 이 작업은 빠르고 효율적이며, Go의 내부 map 구현의 성능 이점을 유지합니다.
챌린지
쉬움Go의 세트(set) 관용구를 사용하여 다양한 장르 컬렉션에서 책을 제거하는 도서관 도서 관리 시스템을 구축하세요. 이 챌린지는 제거 프로세스를 추적하면서 세트에서 요소를 제거하기 위해 delete() 함수를 사용하는 방법을 보여줍니다.
두 개의 입력을 받게 됩니다:
- 쉼표로 구분된 소설 컬렉션의 도서가 포함된 문자열 (예:
"1984,Dune,Foundation,Neuromancer,Brave New World") - 쉼표로 구분된 제거할 도서가 포함된 문자열 (예:
"Dune,Harry Potter,Foundation,Twilight,1984")
당신의 과제는 다음과 같습니다:
- Go의 관용구인
map[string]struct{}를 사용하여 소설 도서를 저장할 세트를 생성합니다. - 첫 번째 입력 문자열을 쉼표로 분할하여 개별 도서 제목을 가져와 파싱합니다.
- 빈 구조체 리터럴
{}를 값으로 사용하여 각 도서를 세트에 추가합니다. - 두 번째 입력 문자열을 쉼표로 분할하여 제거할 도서 목록을 가져와 파싱합니다.
- 제거할 각 도서에 대해 comma ok 관용구를 사용하여 세트에 존재하는지 확인합니다.
- 처리 중인 각 도서에 대한 제거 프로세스를 표시합니다:
- 도서가 컬렉션에 존재하는 경우:
"Removing: [book_title]" - 도서가 컬렉션에 존재하지 않는 경우:
"Not found: [book_title]"
- 도서가 컬렉션에 존재하는 경우:
delete()함수를 사용하여 세트에 존재하는 도서를 제거합니다.- 모든 제거 요청을 처리한 후 요약을 표시합니다:
"Initial collection size: [initial_count]""Removal requests: [requests_count]""Books successfully removed: [removed_count]""Books not found: [not_found_count]""Final collection size: [final_count]"
- 마지막으로 컬렉션에 남은 모든 도서를 나열합니다:
- 헤더:
"Remaining books in fiction collection:" - 각 도서를 별도의 줄에 표시:
"- [book_title]" - 남은 도서가 없는 경우:
"- Collection is empty"
- 헤더:
strings 패키지를 사용하여 입력 문자열을 쉼표로 분할하세요. 이 챌린지는 delete() 함수가 Go 세트에서 요소를 안전하게 제거하는 방법을 보여줍니다. 존재하지 않는 요소를 제거하려고 시도해도 오류가 발생하지 않으므로 정리 작업에 적합합니다.
직접 해보기
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strings"
)
func main() {
// 공백이 포함된 도서 제목을 지원하기 위해 Scanner를 사용하여 입력 읽기
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
fictionBooks := scanner.Text()
scanner.Scan()
booksToRemove := scanner.Text()
// 입력 문자열 파싱
fictionList := strings.Split(fictionBooks, ",")
removeList := strings.Split(booksToRemove, ",")
// TODO: 아래에 코드를 작성하세요
// 1. 소설 책을 저장하기 위해 map[string]struct{}를 사용하여 세트 생성
// 2. fictionList의 각 도서를 세트에 추가
// 3. removeList의 각 도서를 처리하고 존재 여부 확인
// 4. 제거 과정을 표시하고 delete() 함수 사용
// 5. 요약 통계 표시
// 6. 컬렉션에 남은 도서 목록 나열
// 일관된 출력을 위해 남은 도서를 정렬해야 함을 기억하세요
_ = sort.Strings // sort를 사용하면 이 라인을 제거하세요
_ = fmt.Println // fmt를 사용하면 이 라인을 제거하세요
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.