5.2.3 집합의 동적 추가와 삭제
집합에 아이템을 추가할 때는 insert(_:) 구문을 사용합니다. 이 메서드는 함께 전달된 인자값을 집합에 추가하지만, 이미 같은 아이템이 저장되어 있을 때는 아무 처리도 하지 않습니다.
var genres: Set = ["Classic", "Rock", "Balad"]
genres.insert("Jazz")
// genres = {"Jazz", "Rock", "Classic", "Balad"}
genres.insert("Rock")
// genres = {"Jazz", "Rock", "Classic", "Balad"}
genres.insert("Rock")
// genres = {"Jazz", "Rock", "Classic", "Balad"}
집합의 아이템을 삭제할 때는 remove(_:) 메서드를 사용합니다. 인자값에는 삭제하고자 하는 값이 사용됩니다. 메서드가 호출되면 집합 내부 저장소를 검색하여 입력된 인자와 일치하는 아이템을 찾고, 있으면 아이템을 삭제하고 삭제된 값을 반환합니다. 그러나 삭제할 값이 없다면 nil을 반환합니다. 메서드의 반환값을 활용하면 아이템의 삭제 결과를 손쉽게 판단할 수 있어 후속 처리에 편리합니다.
if let removedItem = genres.remove("Rock") {
print("아이템 \(removedItem)의 삭제가 완료되었습니다")
} else {
print("삭제할 값이 없어 집합에 추가되어 있지 않습니다")
}
// 실행 결과
아이템 Rock의 삭제가 완료되었습니다
genres 집합에 Rock이 포함되어 있기 때문에 삭제 후 Rock을 반환하였습니다. 만약 집합에 없는 값을 삭제하려 했다면 nil이 반환되어 else 구문이 실행되었을 것입니다.
스위프트는 집합의 아이템 전체를 삭제할 수 있는 메서드 removeAll()을 제공합니다. 이 메서드는 인자값 없이 호출되어 모든 아이템을 일괄 삭제합니다.
genres.removeAll() // 집합의 모든 아이템 삭제
if genres.isEmpty {
print("모든 아이템이 삭제되었습니다")
} else {
print("아직 \(genres.count)개의 아이템이 남아있습니다")
}
이외에도 스위프트는 집합에 특정 아이템이 있는지 확인할수 있는 contains(_:) 메서드를 제공합니다. 이 메서드는 인자값으로 입력된 데이터를 사용하여 해당 집합 내에서 일치하는 아이템이 있는지 검색하여 있으면 true를, 없으면 false를 반환합니다
var genres: Set = ["Classic", "Rock", "Balad"]
if genres.contains("Rock") {
print("Rock 아이템이 저장되어 있습니다")
} else {
print("Rock 아이템이 저장되어 있지 않습니다")
}
Last updated