요소 포함 여부 확인하기
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의 최적화된 map 구현을 활용해 진정한 집합 자료 구조의 성능 이점을 제공합니다.
챌린지
쉬움Go 집합 관용구를 사용하여 특정한 사람들이 프로젝트 team의 일부인지 확인하는 team member verification 시스템을 구축하세요. 이 challenge에서는 comma ok 관용구를 사용하여 집합에서의 member 여부를 테스트하는 방법을 보여 줍니다.
두 개의 input을 받습니다:
- 쉼표로 구분된 team members를 포함하는 string (예:
"Alice,Bob,Charlie,Diana,Eve") - 확인할 people을 쉼표로 구분하여 포함하는 string (예:
"Bob,Frank,Alice,Grace,Charlie")
다음 작업을 수행하세요:
- Go 관용구
map[string]struct{}를 사용하여 team members를 저장할 집합을 Create합니다. - 첫 번째 input string을 쉼표를 기준으로 Split하여 개별 team member 이름을 Parse합니다.
- 값으로 빈 struct 리터럴
{}를 사용하여 각 team member를 집합에 Add합니다. - 두 번째 input string을 쉼표를 기준으로 Split하여 verification할 people의 목록을 Parse합니다.
- 확인할 each person에 대해 comma ok 관용구
_, ok := teamSet[person]를 사용하여 member 여부를 테스트합니다. - 확인 중인 각 person에 대한 verification results를 Display합니다:
- person이 team에 있는 경우:
"[person] is on the team" - person이 team에 없는 경우:
"[person] is not on the team"
- person이 team에 있는 경우:
- 모든 people을 확인한 후 summary를 Display합니다:
"Team size: [team_member_count]""People checked: [people_checked_count]""Team members found: [found_count]""Non-team members: [not_found_count]"
strings package를 사용하여 input strings를 쉼표를 기준으로 Split합니다. 이 challenge에서는 comma ok 관용구가 Go 집합에서 member 여부를 확인하는 안전하고 효율적인 방법을 제공하며, 값과 key가 exists하는지를 나타내는 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 관용구를 사용하여 각 사람 확인
// 검증 결과 및 요약 표시
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
직접 연습해 보세요: 온라인 Go 컴파일러