본문 바로가기
iOS/Swift

[Swift] Dictionary(grouping:by:)

by 6cess 2024. 7. 12.

https://developer.apple.com/documentation/swift/dictionary/init(grouping:by:)

 

init(grouping:by:) | Apple Developer Documentation

Creates a new dictionary whose keys are the groupings returned by the given closure and whose values are arrays of the elements that returned each key.

developer.apple.com

 

낯선 방식의 생성자이어서 기록해본다.

 

let students = ["Kofi", "Abena", "Efua", "Kweku", "Akosua"]
let studentsByLetter = Dictionary(grouping: students, by: { $0.first! })
// ["E": ["Efua"], "K": ["Kofi", "Kweku"], "A": ["Abena", "Akosua"]]

 

매개변수 이름을 보면 유추할 수 있듯이 grouping할 리스트를 grouping 매개변수에 담고

어떤 것을 기준으로 grouping 할 것인지 매개변수 by에 전달한다.

 

아래와 같은 방식도 가능하다.

let students = [
    ("Alice", "Math", 90),
    ("Bob", "Math", 85),
    ("Charlie", "Science", 95),
    ("Alice", "Science", 100),
    ("Bob", "History", 70)
]

let groupedBySubject = Dictionary(grouping: students) { $0.1 }

/*
[
    "Math": [("Alice", "Math", 90), ("Bob", "Math", 85)],
    "Science": [("Charlie", "Science", 95), ("Alice", "Science", 100)],
    "History": [("Bob", "History", 70)]
]
*/