Array
// 1. 타입 추론으로 생성하기
var array1 = [1, 2, 3]
var array2 = [] // Error. 타입 추론으론 빈 배열 생성 불가
// 2. 타입 Annotation 으로 생성하기
var array3: [Int] = [1, 2, 3]
var array4: [Int] = [] // Ok, 빈 배열 생성
// 3. 생성자로 생성하기
var array5 = Array<Int>()
var array6 = [Int]()
var array7 = [Int](repeating: 0, count: 10) //생성과 동시에 10개 Element 생성 및 0으로 초기화
---------------------------------------------------------------------------------------------------
// 배열 갯수 확인하기
var array1 = [1, 2, 3]
let count: Int = array1.count // 3
let isEmpty: Bool = array1.isEmpty // false
---------------------------------------------------------------------------------------------------
// 배열 요소에 접근하기
var array1 = [1, 2, 3]
//1. Subscript 로 접근하기
array1[0] //1
array1[1] //2
//2. 범위로 접근하기
array1[0...1] // [1, 2]
//3. 속성으로 접근하기
array1.first //Optional(1)
array1.last //Optional(3)
---------------------------------------------------------------------------------------------------
// 배열에 요소 추가하기
// 1. append : 끝에 추가
var array1 = [1, 2, 3]
array1.append(4) // [1, 2, 3, 4]
array1.append(contentsOf: [5, 6, 7]) // [1, 2, 3, 4, 5, 6, 7]
// 2. insert : 중간에 추가
var array2 = [1, 2, 3]
array2.insert(0, at: 0) // [0, 1, 2, 3]
array2.insert(contentsOf: [10, 100], at: 2) //[0, 1, 10, 100, 2, 3]
---------------------------------------------------------------------------------------------------
// 배열의 요소 변경하기
//1. Subscript 로 변경하기
var array1 = [1, 2, 3]
array1[0] = 10 //[10, 2, 3]
array1[0...2] = [10, 20, 30] //[10, 20, 30]
array1[0...2] = [0] //[0]
array1[0..<1] = [] //[]
//2. replaceSubrange로 바꾸기 (범위 변경 시)
var array2 = [1, 2, 3]
array2.replaceSubrange(0...2, with: [10, 20, 30]) //[10, 20, 30]
array2.replaceSubrange(0...2, with: [0]) //[0]
array2.replaceSubrange(0..<1, with: []) //[]
---------------------------------------------------------------------------------------------------
// 배열의 요소 삭제하기
//1. 일반적인 삭제하기
var array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array1.remove(at: 2) //[1, 2, 4, 5, 6, 7, 8, 9] Index 2번 삭제
array1.removeFirst() //[2, 4, 5, 6, 7, 8, 9] 처음만 삭제
array1.removeFirst(2) //[5, 6, 7, 8, 9] 처음부터 2개 삭제
array1.removeLast() //[5, 6, 7, 8] 마지막 삭제
array1.popLast() //[5, 6, 7] 마지막 삭제
array1.removeLast(2) //[5] 마지막부터 2개 삭제
array1.removeAll() //[] 전부 삭제
//2. 특정 범위 삭제하기
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
array2.removeSubrange(1...3) //[1, 5, 6, 7, 8, 9] Index 1~3 삭제
array2[0..<2] = [] //[6, 7, 8, 9] Index 0,1 빈배열로 설정
---------------------------------------------------------------------------------------------------
// 배열 비교하기
var array1 = [1, 2, 3]
var array2 = [1, 2, 3]
var array3 = [1, 2, 3, 4, 5]
array1 == array2 //true
array1.elementsEqual(array3) //false
---------------------------------------------------------------------------------------------------
// 배열 정렬하기
let array1 = [1, 5, 3, 8, 6, 10, 14]
// 1. sort : 배열을 직접 "오름차순"으로 정렬
array1.sort()
//출력값: [1, 3, 5, 6, 8, 10, 14]
//1-1. sort + 클로저 : 배열을 직접 "내림차순"으로 정렬
array1.sort(by: >)
//출력값: [14, 10, 8, 6, 5, 3, 1]
//2. sorted : 원본은 그대로 두고, "오름차순"으로 정렬된 새로운 배열을 만들어 리턴
let sortedArray = array1.sorted()
//출력값: [1, 3, 5, 6, 8, 10, 14]
//2-1. sorted + 클로저 : 원본은 그대로 두고, "내림차순"으로 정렬된 새로운 배열을 만들어 리턴
let sortedArray2 = array1.sorted(by: >)
//출력값: [14, 10, 8, 6, 5, 3, 1]