iOS/Swift

데이터 타입 고급 3편 (컬렉션형)

밤새는 탐험가89 2024. 1. 5. 12:02

스위프트는 컬렉션 타입을 통해 수 많은 데이터를 묶어 관리

컬렉션 타입에는 배열(Array), 딕셔너리(Dictionary), 세트(Set) 있음

 

 

 

배열 

같은 타입의 데이터를 순서대로 저장

중복 저장 가능

 

배열 선언과 생성

// 배열 선언 방법
var fruitList: Array<String> = ["Apple", "Banana", "Melon"]
var fruits: [String] = ["Apple", "Banana", "Melon"]

 

 

배열의 사용 

배열은 인덱스를 통해 요소 접근 (인덱스는 0부터 시작)

index(of: ) => 해당 요소의 인덱스 확인

(중복 요소 있을 시, 가장 먼저 발견된 요소의 인덱스 확인)

★ index(of: )  대신 firstIndex(of: ) 사용 권장 ★

 

append(_: ) => 배열 맨 뒤에 요소 추가 

insert(_: , at: ) => 배열에 원하는 인덱스에 요소 추가 

remove(at: ) => 배열에 원하는 인덱스에 요소 삭제 

(삭제된 요소는 반환하여 사용할 수 있음)

// 배열 선언 방법
var fruits: [String] = ["Apple", "Banana", "Melon", "Apple"]


// index(of:)
print(fruits.index(of: "Apple"))       // 0
print(fruits.firstIndex(of: "Apple"))  // 0



// append 
fruits.append("Kiwi")
fruits.append(contentsOf: ["Mango", "Strawvery"])
print(fruits)    
// ["Apple", "Banana", "Melon", "Apple", "Kiwi", "Mango", "Strawvery"]



// insert(_, at: )
fruits.insert("Kiwi", at: 0)
print(fruits)
// ["Kiwi", "Apple", "Banana", "Melon", "Apple", "Kiwi", "Mango", "Strawvery"]



// remove(at: )
fruits.remove(at:0)   // 인덱스 0 번째의 "Kiwi" 삭제
print(fruits)   
// ["Apple", "Banana", "Melon", "Apple", "Kiwi", "Mango", "Strawvery"]



// 범위 연산자로 일부 배열만 갖고 올 수 있음
print(fruits[1...3])
// ["Banana", "Melon", "Apple"]

 

 

 

딕셔너리 

요소들이 순서 없이 키 - 값 으로 구성된 타입 

키를 중복하여 사용 할 수 없음

 

딕셔너리 선언과 생성

var marketA: Dictionary<String,Int> = Dictionary<String,Int>()
var marketB: [String: Int] = [String: Int]()
// 타입 별칭 사용
typealias marketType = [String: Int]
var marketC: marketType = marketType()
var marketD: [String: Int] = [:]
var marketE: [String: Int] = ["Apple": 1000, "Banana": 2300, "Kiwi": 3200]

print(marketE)
// ["Apple": 1000, "Banana": 2300, "Kiwi": 3200]

 

 

 

 

딕셔너리의 사용 

removeValue(forKey: ) 메서드를 사용하여 키에 해당하는 값을 제거한 후 반환

var marketE: [String: Int] = ["Apple": 1000, "Banana": 2300, "Kiwi": 3200]
print(marketE)
// ["Apple": 1000, "Banana": 2300, "Kiwi": 3200]



print(marketE["Apple"])   // 1000
marketE["Apple"] = 2000
print(marketE["Apple"])   // 2000



marketE.removeValue(forKey: "Kiwi")
print(marketE) 
// ["Banana": 2300, "Apple": 2000]



marketE["Kiwi"] = 3000
print(marketE)
// ["Banana": 2300, "Kiwi": 3000, "Apple": 2000]

 

 

 

세트

같은 타입의 데이터를 순서 없이 하나로 묶은 타입 

모든 데이터는 중복안됨 

순서가 중요하지 않거나 또는 각 요소가 유일할 경우 사용

 

세트의 선언과 생성  

var fruitsA: Set<String> = Set<String>()
var fruitsB: Set<String> = []


var fruitsC: Set<String> = ["Apple", "Mango", "Melon", "Apple"]
print(fruitsC)
// ["Mango", "Apple", "Melon"]

 

 

 

세트의 사용 

var fruitsC: Set<String> = ["Apple", "Mango", "Melon", "Apple"]
print(fruitsC)
// ["Mango", "Apple", "Melon"]
 
 
fruitsC.insert("Kiwi")
print(fruitsC)
// ["Mango", "Kiwi", "Melon", "Apple"]



fruitsC.remove("Mango")
print(fruitsC)
// ["Kiwi", "Melon", "Apple"]

 

 

 

세트는 내부의 값들에 대해 유일함을 보장하기 떄문에

집합관계를 표현할 때 유용하게 사용