init(grouping:by:)

func groupMenuByCategory(_ menu: [MenuItem]) -> [MenuSection] { if menu.isEmpty { return [] } return Dictionary(grouping: menu, by: { $0.category }) .map { key, value in MenuSection(category: key, items: value) } .sorted { $0.category > $1.category } } 이 함수는 MenuItem 배열을 받아서 카테고리별로 그룹화하고, 각 그룹을 MenuSection 배열로 변환합니다. 각 단계는 다음과 같습니다:

빈 배열 검사:

if menu.isEmpty { return [] } 메뉴가 비어 있는 경우, 빈 배열을 반환합니다. 그룹화:

Dictionary(grouping: menu, by: { $0.category }) 메뉴 항목을 category 기준으로 그룹화합니다. 변환:

.map { key, value in MenuSection(category: key, items: value) } 그룹화된 딕셔너리를 MenuSection 배열로 변환합니다. 정렬:

.sorted { $0.category > $1.category } MenuSection 배열을 카테고리 이름을 기준으로 내림차순으로 정렬합니다. 예시 입력 데이터

swift Copy code let menu = [ MenuItem(category: “pastas”, name: “a pasta”), MenuItem(category: “drinks”, name: “a drink”), MenuItem(category: “pastas”, name: “another pasta”), MenuItem(category: “desserts”, name: “a dessert”), MenuItem(category: “salads”, name: “a salad”) ] 단계별 설명

그룹화: Dictionary(grouping: menu, by: { $0.category }) menu 배열을 category 기준으로 그룹화하면 다음과 같은 딕셔너리가 생성됩니다: swift Copy code [ “pastas”: [ MenuItem(category: “pastas”, name: “a pasta”), MenuItem(category: “pastas”, name: “another pasta”) ], “drinks”: [ MenuItem(category: “drinks”, name: “a drink”) ], “desserts”: [ MenuItem(category: “desserts”, name: “a dessert”) ], “salads”: [ MenuItem(category: “salads”, name: “a salad”) ] ] 변환: .map { key, value in MenuSection(category: key, items: value) } 위의 딕셔너리를 MenuSection 배열로 변환하면 다음과 같이 됩니다: swift Copy code [ MenuSection(category: “pastas”, items: [ MenuItem(category: “pastas”, name: “a pasta”), MenuItem(category: “pastas”, name: “another pasta”) ]), MenuSection(category: “drinks”, items: [ MenuItem(category: “drinks”, name: “a drink”) ]), MenuSection(category: “desserts”, items: [ MenuItem(category: “desserts”, name: “a dessert”) ]), MenuSection(category: “salads”, items: [ MenuItem(category: “salads”, name: “a salad”) ]) ] 정렬: .sorted { $0.category > $1.category } MenuSection 배열을 카테고리 이름 기준으로 내림차순 정렬하면 다음과 같이 됩니다: swift Copy code [ MenuSection(category: “salads”, items: [ MenuItem(category: “salads”, name: “a salad”) ]), MenuSection(category: “pastas”, items: [ MenuItem(category: “pastas”, name: “a pasta”), MenuItem(category: “pastas”, name: “another pasta”) ]), MenuSection(category: “drinks”, items: [ MenuItem(category: “drinks”, name: “a drink”) ]), MenuSection(category: “desserts”, items: [ MenuItem(category: “desserts”, name: “a dessert”) ]) ] 정리 Dictionary(grouping:by:): menu 배열을 category 기준으로 그룹화하여 딕셔너리로 변환합니다. map { key, value in MenuSection(category: key, items: value) }: 딕셔너리를 MenuSection 배열로 변환합니다. sorted { $0.category > $1.category }: MenuSection 배열을 카테고리 이름 기준으로 내림차순으로 정렬합니다. 이렇게 하면 입력된 MenuItem 배열을 카테고리별로 그룹화하고, 각 카테고리를 포함하는 MenuSection 배열을 생성하여 반환할 수 있습니다.