요소 포함 여부 확인하기
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 34번째.
이제 세트에 요소를 추가할 수 있게 되었으므로, 다음으로 필수적인 작업은 특정 요소가 세트에 존재하는지 확인하는 것입니다. 여기서 Go의 "comma ok" 관용구가 매우 유용하게 사용됩니다.
세트에 요소가 존재하는지 확인하려면 맵에서 키를 확인하는 것과 동일한 구문을 사용합니다:
_, 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")
}이 멤버십 테스트는 빠르고 효율적이며, Go의 최적화된 맵 구현을 활용하여 진정한 세트(set) 데이터 구조의 성능 이점을 제공합니다.
챌린지
쉬움Go의 set 관용구(idiom)를 사용하여 특정 인물이 프로젝트 팀의 구성원인지 확인하는 팀원 검증 시스템을 구축하세요. 이 챌린지는 set의 멤버십을 테스트하기 위해 comma ok 관용구를 사용하는 방법을 보여줍니다.
두 개의 입력을 받게 됩니다:
- 쉼표로 구분된 팀원 이름이 포함된 문자열 (예:
"Alice,Bob,Charlie,Diana,Eve") - 쉼표로 구분된 확인할 인물들이 포함된 문자열 (예:
"Bob,Frank,Alice,Grace,Charlie")
수행할 작업은 다음과 같습니다:
- Go의 관용구인
map[string]struct{}를 사용하여 팀원을 저장할 set을 생성합니다. - 첫 번째 입력 문자열을 쉼표로 분할하여 개별 팀원 이름을 파싱합니다.
- 빈 구조체 리터럴인
{}를 값으로 사용하여 각 팀원을 set에 추가합니다. - 두 번째 입력 문자열을 쉼표로 분할하여 검증할 인물 목록을 파싱합니다.
- 확인할 각 인물에 대해, comma ok 관용구인
_, ok := teamSet[person]를 사용하여 멤버십을 테스트합니다. - 확인 중인 각 인물에 대한 검증 결과를 표시합니다:
- 해당 인물이 팀에 있는 경우:
"[person] is on the team" - 해당 인물이 팀에 없는 경우:
"[person] is not on the team"
- 해당 인물이 팀에 있는 경우:
- 모든 인물을 확인한 후, 요약을 표시합니다:
"Team size: [team_member_count]""People checked: [people_checked_count]""Team members found: [found_count]""Non-team members: [not_found_count]"
입력 문자열을 쉼표로 분할하려면 strings 패키지를 사용하세요. 이 챌린지는 comma ok 관용구가 Go set에서 멤버십을 확인하는 안전하고 효율적인 방법을 제공하며, 값과 키의 존재 여부를 나타내는 불리언(boolean)을 모두 반환하는 방식을 보여줍니다.
직접 해보기
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 관용구를 사용하여 각 인원 확인
// 확인 결과 및 요약 표시
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.