iOS/Swift이론

[iOS]Swift 컬렉션 타입 : Array, Dictionary, Set

Sweetft 2022. 3. 3. 22:11

컬렉션 타입[Collection Type]

데이터들의 집합이다. Swfit에서는 배열[array], 딕셔너리[dictionary], 세트[set]를 지원하고 있다.

 

배열[Array]

배열은 같은 타입의 데이터들을 순서에 맞춰 리스트에 저장한다.

//빈 배열 생성
var firstArray: Array<Int> = Array<Int>()
//var firstArray = [Int]() //축약형1
//var firstArray: [Int] = [] //축약형2

//배열에 값 삽입
firstArray.append(0)
firstArray.append(1)
firstArray.append(3)

//배열의 원하는 자리에 값 삽입
firstArray.insert(2, at: 2) //2번 인덱스에 2를 넣는다.
firstArray += [4, 5] //연산자를 사용해 여러 값을 삽입한다.
print(firstArray) //결과: [0,1,2,3,4,5]

//배열에서 특정 값 삭제
firstArray.remove(at: 3) //3번 인덱스의 값을 삭제한다.
print(firstArray) //결과: [0,1,2,4,5]

//배열의 값 수정
firstArray[0] = 1
print(firstArray) //결과: [1,1,2,4,5]

//빈 배열로 만들기
firstArray.removeAll() //배열은 남아있지만 배열 안에 있던 값들은 모두 사라진다.

//배열의 개수
print(firstArray.count) //결과: 0

//기본 값과 함께 배열 생성
var secondArray = ["안","녕","하","세","요"]
print(secondArray) //결과: ["안","녕","하","세","요"]
print(type(of:secondArray)) //결과: Array<String>

//배열에 접근하기
print(secondArray[2...4]) //결과: ["하","세","요"]
print(secondArray[1]) //결과: 녕


//배열의 인덱스 찾기
print(secondArray.index(of: "하")) //결과: Optional(2)
//배열의 인덱스 언랩핑해서 사용하기
if let letter = secondArray.firstIndex(of: "요") {
    secondArray[letter] = "여"
}
print(secondArray) //결과: ["안","녕","하","세","여"]

//배열에 어떠한 값이 있는지?
print(secondArray.contains("안")) //결과: true

 

딕셔너리[Dictionary]

딕셔너리는 키[key]와 값[value]으로 구성된 집합을 순서없이 저장한다.

//딕셔너리 생성
var firstDic: Dictionary<String, Int> = Dictionary<String, Int>()
var dic: [String: Int] = ["첫번째": 1, "두번째": 2] //축약형
print(dic) //순서가 없기 때문에 실행시마다 순서가 다르다.

//딕셔너리 요소 삽입
dic["세번째"]=3
dic["첫번째"]=2 //덮어쓰기
print(dic) //결과: ["두번째": 2, "첫번째": 2, "세번째": 3] 

dic.updateValue(200, forKey: "두번째") //덮어쓰기
dic.updateValue(4, forKey: "네번째")
print(dic) //결과: ["첫번째": 2, "두번째": 200, "네번째": 4, "세번째": 3]

//key, value 출력
print(dic.keys) //결과: ["두번째","세번째","첫번째","네번째"]
print(dic.values) //결과: [2,200,4,3]


//딕셔너리 접근
print(dic["첫번째"]) //결과: Optional(2)
print(dic["두번째",default: 20]) //결과: 200

//딕셔너리 원소 개수 확인
print(dic.count) //결과: 4
//딕셔너리가 비었는지 확인
print(dic.isEmpty) //결과: false


//요소 삭제하기
dic["첫번째"] = nil
dic.removeValue(forKey: "두번째")
dic.removeAll() //전체 삭제하기

 

세트[Set]

세트는 같은 타입의 데이터들을 순서 없이 저장한다. 순서가 없기 때문에 중복된 값을 구분할 수 없다. (=즉, 허용하지 않는다.) 집합으로 사용하기 좋음.

/*
//세트의 기본적인 사용
var firstSet: Set<Int> = Set<Int>()
//var secondSet : set<String> = []

firstSet.insert(3)
firstSet.insert(2)
firstSet.insert(2)
print(firstSet) //결과: [2,3]

firstSet.remove(2)
print(firstSet) //결과:[3]
*/

//기본값을 포함한 세트 생성
var food : Set = ["된장찌개", "계란말이", "파스타", "치킨"]
food.insert("계란찜")
print(food) //결과: ["파스타", "계란찜", "된장찌개", "치킨", "계란말이"]
print(food.count) //결과: 5
print(food.isEmpty) //결과: false
print(food.remove("파스타")) //결과: optional("파스타")
print(food) //결과: ["계란찜", "된장찌개", "치킨", "계란말이"]


var number1 : Set = [1,2,3,4,5]
var number2 : Set = [1,2,6,7,10]

//number1과 number2의 교집합
print(number1.intersection(number2)) //결과: [2,1]
//합집합
print(number1.union(number2)) //결과: [6,10,1,4,2,7,3,5]
//차집합
print(number1.subtracting(number2)) //결과: [4,3,5]
//number1과 number2의 합집합을 바로 새로 선언하는 세트에 초기화
var numberUnion: Set<Int> = number1.union(number2)
print(numberUnion) //결과: [6,10,1,4,2,7,3,5]
//number2가 number1의 부분집합인지?
print(number2.isSubset(of:numberUnion)) true

'iOS > Swift이론' 카테고리의 다른 글

[iOS]Swift 구조체  (0) 2022.03.22
[iOS]Swift 함수  (0) 2022.03.17
[iOS]Swift 반복문 : for-in, while, repeat-while  (1) 2022.03.03
[iOS]Swift 개념! Optional이란?  (0) 2022.01.06
Swift 문법 공부를 위한 웹사이트  (0) 2022.01.05