완료 표시하기
Coddy Swift 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 34번째.
첫 번째 기능: "이 날짜에 이 습관을 완료로 표시" 작업 목록을 처리하고 최종 상태를 생성하는 것입니다.
각 입력 줄은 habit:day 형식의 연산 하나를 나타내며, 여기서 day는 1과 7 사이의 값입니다. 해당 습관(habit)이 아직 존재하지 않는다면 빈 배열로 생성한 후 날짜(day)를 추가하세요. 해당 습관에 이미 날짜가 기록되어 있다면 중복해서 기록하지 마세요.
딕셔너리 장에서 배운 기본 서브스크립트(default-subscript) 패턴을 활용하게 될 것입니다: habits[name, default: []].append(day)는 키의 존재 여부와 상관없이 작동합니다.
챌린지
쉬움한 줄의 입력을 읽습니다: 쉼표로 구분된 habit:day 항목 목록(예: read:1,read:3,workout:2)입니다. 모든 작업을 적용한 후, 습관을 알파벳 순서로 한 줄에 하나씩 다음 형식으로 출력하십시오:
<habit>: <days_sorted_ascending_joined_with_comma>중복된 habit:day 쌍은 제외합니다.
입력 read:1,read:3,workout:2,read:1,read:5,workout:4에 대한 출력은 다음과 같습니다:
read: 1,3,5
workout: 2,4치트 시트
배열 딕셔너리에 요소를 추가할 때 default-subscript 패턴을 사용하여 키가 존재하지 않으면 생성하도록 합니다:
var habits: [String: [Int]] = [:]
habits[name, default: []].append(day)
중복을 피하려면 추가하기 전에 확인하세요:
if !habits[name, default: []].contains(day) {
habits[name, default: []].append(day)
}
직접 해보기
var habits: [String: [Int]] = [:]
let ops = readLine()!.components(separatedBy: ",")
// TODO: 각 작업(op)에 대해 name:day 형식을 파싱하고, 해당 요일이 아직 없으면 추가합니다.
// 그 다음 습관을 알파벳 순서로 정렬된 요일과 함께 출력합니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.