IOS/swift 기초 문법

[Swift 기초 문법] 1.4 (Array, Dictionary, Set)

식빵민 2022. 7. 4. 00:34
  • Array - 순서가 있는 리스트 컬렉션
  • Dictionary - '키'와 '값'의 쌍으로 이루어진 컬렉션
  • Set - 순서가 없고, 멤버가 유일한 컬렉션

1. Array

  • 멤버가 순서(인덱스)를 가진 리스트 형태의 컬렉션 타입
  • 여러 리터럴 문법들을 활용해 다양한 표현 가능
var intArray : Array<Int> = Array<Int>()
intArray.append(1)
intArray.append(33)

print(intArray.contains(33)) // true
print(intArray.contains(99)) // false

intArray.remove(at: 0)//0번째 인덱스 지우기
// = intArray.removeFirst()
intArray.removeLast()
intArray.removeAll()

print(intArray.count)   // 0

//integers[0] // 범위 초과 - 런타임 오류 발생

// Array<Double>와 [Double]는 같은 표현
var doubleArr: Array<Double> = [Double]() // 빈 Double 형 Array 생성

var stringArr: [String] = [String]() // 빈 String 형 Array 생성

// []는 새로운 빈 Array
var charArr: [Character] = [] // 빈 Character 형 Array 생성

// let을 사용하여 Array를 선언하면 불변 Array
let invariableArr = [1, 2, 3]

// 불변 Array의 요소는 추가,삭제 불가 -> 컴파일 오류 발생
//invariableArr.append(13) !오류! 변경할 수 없는 값에 변경 멤버를 사용할 수 없음: 'invariableArr'은 'let' 상수

2. Dictionary

  • 'key'와 'value'의 쌍으로 이루어진 컬렉션 타입
  • Array와 마찬가지로 여러 리터럴 문법들을 통해 다양한 표현 가능
var dictExample: Dictionary<Int, Any> = [Int: Any]()// key가 Int고, Value가 Any인 빈 Dictionary 생성

dictExample[1] = "value"
dictExample[22] = 123 
print(dictExample) // [1: "value", 2: 123]

dictExample[1] = 321// Key에 해당하는 값 변경
dictExample.removeValue(forKey: 1) // Key에 해당하는 값 제거
dictExample[22] = nil // Key에 해당하는 값 제거
 
let emptyDictionary: [String: String] = [:] // 빈 Dictionary 생성
let fixedDictionary: [String: String] = ["name": "bbangMin", "age": "23"] 
// 초기값을 가지는 Dictionary

// 
//emptyDictionary["key"] = "value" !컴파일 오류 발생! let으로 선언한 Dictionary는 불변, 수정불가
//let nickname: String = fixedDictionary["name"] !오류 발생!
//어떤 key에 해당하는 value 값이 Dictionary에 존재하지 않을 수 있음

3. Set

  • 중복되지 않는 멤버가 순서없이 존재하는 컬렉션 타입
  • Array, Dictionary와 다르게 축약형이 존재하지 않음
var intSet: Set<Int> = Set<Int>() // 빈 정수형 Set 생성

intSet.insert(1) //(inserted true, memberAfterInsert 1)
intSet.insert(33) //(inserted true, memberAfterInsert 33)
intSet.insert(111) //(inserted true, memberAfterInsert 111)
intSet.insert(111) //(inserted false, memberAfterInsert 111)
intSet.insert(111) //(inserted false, memberAfterInsert 111)

print(intSet)
print(intSet.contains(111)) //true
print(intSet.contains(22)) //false
intSet.remove(1) // 1 삭제
intSet.removeFirst() //33 삭제
print(intSet.count) // 1

//Set으로 집합 연산
let set1: Set<Int> = [1, 2, 3, 4, 5]
let set2: Set<Int> = [1, 3, 5, 7, 9]

let union: Set<Int> = set1.union(set2) // 합집합
print(union) // [3, 4, 5, 9, 7, 1, 2]

let sorting: [Int] = union.sorted() // 오름차순 sorting 배열로 바뀜
print(sorting) // [ 1, 2, 3, 4, 5, 7, 9]

let interSection: Set<Int> = set1.intersection(set2) // 교집합
print(interSection) // [3, 5, 1]

let subTracting: Set<Int> = set1.subtracting(set2) // 차집합
print(subTracting) // [2, 4]