728x90
안녕하세요:)
오늘은 배열에 대해서 알아보도록 하겠습니다.
- 배열은 하나 이상의 데이터를 연속해서 저장하는 컬렉션입니다.
- 배열은 저장한 순서대로 저장됩니다.
- 순서를 일련번호, 즉 인덱스(Index)라고 합니다.
- 배열은[](브라켓) 사이에 값을 저장합니다.
- 배열의 자료형은 배열을 생성하는 시점에 요소의 자료형을 통해 결정됩니다.
- 배열은 정식 문법, 단축 문법으로 작성할 수 있습니다.
- 배열에 접근할 때는 인덱스를 통해 요소에 접근합니다.
배열에 대한 기초적인 설명은 끝났습니다.
이제 코드를 통해서 알아보도록 하겠습니다.
let num = [1, 2, 3, 4]
숫자 1, 2, 3, 4를 순서대로 저장한 Int 배열입니다.
배열의 자료형과 선언 문법을 보겠습니다.
let strArray: Array<String> // 정식 문법입니다.
let strArray2: [String] // 단축 문법입니다.
let emptyArray = [Int]()
let emptyArray2: [Int] = []
let emptyArray3 = Array<Int>()
빈 배열을 만들 때 주의해야 할 사항이 있습니다. 빈 배열은 생성할 때 자료형을 지정해 줘야 합니다.
그 이유는 형식 추론이 불가능하기 때문에 꼭 자료형을 지정해 줘야 합니다.
var Apple: [String] = ["iPhone", "iPad", "Air Pod", "iMac", "Macbook"] // 단축 문법
var Apple2: Array<String> = ["iPhone", "iPad", "Air Pod", "iMac", "Macbook"] // 정식 문법
var Apple3 = ["iPhone", "iPad", "Air Pod", "iMac", "Macbook"]
var emptyApple: [String] = []
Apple.count // 5 배열 요소의 갯수를 확인할 때 사용합니다.
Apple.count == 0 // false
Apple.isEmpty // false, 배열이 비어있는지 확인할 때 사용합니다.
emptyApple.isEmpty // true
그럼 배열의 요소에 접근할 때는 어떻게 접근해야 할까요?
배열의 요소에 접근할 때는 인덱스로 접근해야 합니다.
var Apple = ["iPhone", "iPad", "Air Pod", "iMac", "MacBook"]
var emptyApple: [String] = []
Apple[0] // iPhone
Apple.first // iPhone, 첫 번째 요소에 접근, 배열이 비어있는 경우에 nil을 리턴합니다.
Apple.last // MacBook, 마지막 요소에 접근, 배열이 비어있는 경우에 nil을 리턴합니다.
emptyApple[0] // error!!
emptyApple.first // nil
emptyApple.last // nil
Apple[0...2] // iPhone, iPad, Air Pod
Apple[Apple.startIndex] // iPhone
Apple[Apple.index(after: Apple.startIndex)] // iPad
Apple[Apple.index(before: Apple.endIndex)] // MacBook
Apple[Apple.index(Apple.startIndex, offsetBy: 2)] // Air Pod
주의!
비어있는 배열에서 잘못된 범위를 전달하면 crash가 일어납니다.
first나 last는 옵셔널이기 때문에 배열이 비어있으면 nil을 리턴합니다.
<Adding Element>
배열에 새로운 요소를 추가해보도록 하겠습니다.
var Apple = ["iPhone", "iPad", "Air Pod", "iMac", "MacBook"]
Apple.append("Apple Watch") // "iPhone", "iPad", "Air Pod", "iMac", "MacBook", "Apple Watch"
Apple.append(contentsOf: ["Air Pod Pro", "iPhone Pro"]) // ["iPhone", "iPad", "Air Pod", "iMac", "MacBook", "Apple Watch", "Air Pod Pro", "iPhone Pro"]
Apple.insert("iPhone 11", at: 1) // ["iPhone", "iPhone 11", "iPad", "Air Pod", "iMac", "MacBook", "Apple Watch", "Air Pod Pro", "iPhone Pro"]
Apple.insert(contentsOf: ["Air Pod1", "Air Pod2"], at: 4) // ["iPhone", "iPhone 11", "iPad", "Air Pod", "Air Pod1", "Air Pod2", "iMac", "MacBook", "Apple Watch", "Air Pod Pro", "iPhone Pro"]
Apple = ["iPhone", "iPad", "Air Pod", "iMac", "MacBook"] // 초기화
Apple[0...1] = ["iPhone Pro Max"]
Apple // ["iPhone Pro Max", "Air Pod", "iMac", "MacBook"]
Apple.replaceSubrange(0...3, with: ["Apple"])
Apple // ["Apple"]
append 메소드를 사용해서 추가하면 배열의 맨 뒤에 새로운 요소가 추가됩니다.
insert 메소드로 추가하면 배열의 맨 앞 또는 중간에 들어오게 됩니다.
insert를 사용해서 추가하면 오버헤드가 발생하기 때문에 꼭 필요한 경우에만 사용하는 게 좋습니다.
<Removing Element>
배열의 요소를 삭제해보도록 하겠습니다.
var num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
num.remove(at: 0) // 1
num.removeFirst() // 2 , 배열의 첫 번째 요소를 삭제 후 삭제한 값을 리턴합니다.
num // 3, 4, 5, 6, 7, 8, 9, 10]
num.removeFirst(2) // [5, 6, 7, 8, 9, 10], 입력한 갯수만큼 삭제 후 배열을 리턴합니다.
num // [5, 6, 7, 8, 9, 10]
num.removeLast() // 10, 마지막 요소 삭제 후 삭제한 값을 리턴합니다.
num.removeLast(2) // [5, 6, 7], 입력한 갯수만큼 뒤에서부터 삭제한 후 배열을 리턴합니다.
num.removeAll()
num.removeAll(keepingCapacity: true)
num.popLast() // 옵셔널, 마지막 요소를 삭제한 다음 리턴해주는데 배열이 비어있으면 nil을 리턴해줍니다. 코드가 안전해집니다.
num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] // 초기화
// 특정 범위 삭제
num.removeSubrange(0...2) // [4, 5, 6, 7, 8, 9, 10]
num[0...2] = []
num // [7, 8, 9, 10]
<Comparing Array>
배열을 비교하는 방법에 대해서 알아보도록 하겠습니다.
let a = ["A", "B", "C"]
let b = ["a", "b", "c"]
a == b // false
a != b // true
a.elementsEqual(b) // false
a.elementsEqual(b) { (lhs, rhs) -> Bool in
return lhs.caseInsensitiveCompare(rhs) == .orderedSame
} // true, 대소문자를 무시하고 비교합니다.
<Sorting on Array>
배열을 정렬해보도록 하겠습니다.
var num = [1, 3, 5, 7, 2, 4, 6, 9, 8, 10]
num.sorted() // 배열을 오름차순으로 정렬하고, 새로운 배열을 리턴합니다.
num
num.sort() // 배열을 직접 오름차순으로 정렬합니다.
num
num.sorted().reversed() // 배열의 메모리를 공유하면서 역순으로 열거할 수 있는 형식을 리턴해줍니다.
[Int](num.sorted().reversed()) // [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
num.sorted { (a, b) -> Bool in
return a > b
} // [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
num.sorted { $0 > $1 } // 문법 최적화
<특정 요소를 교체>
var num = [1, 3, 5, 7, 2, 4, 6, 9, 8, 10]
num.swapAt(0, 1) // 3, 1, 5, 7, 2, 4, 6, 9, 8, 10] , 1과 3이 교체됩니다.
num.shuffle() // 배열을 직접 랜덤으로 바꿉니다.
num.shuffled() // 요소의 순서를 랜덤으로 바꾼 새로운 배열을 리턴해줍니다.
728x90
'Swift' 카테고리의 다른 글
Enumeration (0) | 2020.11.22 |
---|---|
Dictionary (0) | 2020.11.20 |
String Compare, Search, Option (0) | 2020.11.19 |
String Editing (0) | 2020.11.19 |
String (0) | 2020.11.18 |