컬렉션(collection) : 여러개의 데이터를 한꺼번에 담루는 바구니 타입
var numsArray = [1, 2, 3, 4, 5]
var stringArray : [String] = ["apple", "swift", "ios", "hello"]
// 정식문법
let strArray1 : Array<String> = []
// 단축문법
let strArray2 : [String] = []
// 빈 배열 생성하기
let emptyArray1 : [Int] = [] // 변수 선언 해줘야 함
let emptyArray2 = Array<int>() // 생성자 사용
let emptyArray3 = [Int]() // 생성자 사용
// 배열 기능
var numsArray = [1, 2, 3, 4, 5]
numsArray.count // 5
numsArray.isEmpty // false
numsArray.contains(1) // true
numsArray.contains(8) // false
numsArray.randomElement() // 배열에서 랜덤으로 하나 추출
numsArray.swapAt(0, 1) // 0과 1 순서 바꿔
// 배열 element에 접근
var numsArray = [1, 2, 3, 4, 5]
var stringArray : [String] = ["apple", "swift", "ios", "hello"]
stringArray[0] // "apple"
stringArray[3] // "hello"
stringArray[1] = "steve" // ["apple", steve", "ios", "hello"]
stringArray.first // Optional("apple") -> 값이 없을 수도 있는 경우가 있기 때문에 옵셔널로 준다
stringArray.last // "hello"
stringArray.startIndex // 0
stringArray.endIndx // 4 -> 강의자료 보면 이해하기 쉽다. 마지막 element + 1
stringArray.index(0, offsetBy : 2) // 0이라는 인덱스부터 2 떨어져 있는거 => 2 출력
stringArray.index(1, offsetBy : 2) // 3
stringArray.firstIndex(of : "ios") // 앞에서부터 찾았을 때 몇 번째에 있냐 => 2 출력
stringArray.lastIndex(of : "ios") // 뒤에서부터 찾았을 때 (앞에서부터) 몇 번째에 있냐 => 2 출력
// 지금은 두 함수가 같은 값이 나오지만, 중복된 값이 배열에 존재할 때 다른 값이 나오게 된다
// 위에서 stringArray.first는 Optional로 주었기 때문에 코드 짤 때 주의하자
if let index = stringArray.firstIndex(of:"ios") {
print(index)
print(stringArray[index])
}
// 삽입 (insert)
var arr = ["a", "b", "c", "d", "e", "f", "g"]
arr.insert("h", at : 7) // ["a", "b", "c", "d", "e", "f", "g", "h"]
arr.insert(contentsOf : ["h", "i"], at : 7 // contentsOf는 배열을 주는거
// 교체 (replace)
arr[0] = "a"
arr[0...2] = ["x", "y", "z"] // 범위를 교체
arr[0...1] = [] // 원하는 범위 삭제
arr.replaceSubrange(0...2, with : ["p", "q", "r"] // replace 함수 사용
// 추가 (append)
arr += ["h"]
arr.append("h")
arr.append(contentsOf : ["h", "i"])
arr.append(4) // 에러
// 삭제 (remove)
arr[0...2] = []
arr.remove(at : 2) // 두 번째 자리에 있는 element 삭제
arr.remove(at : 8) // 에러 (Index out of range)
arr.remove(at : arr.endIndex - 1) // 마지막에 있는 원소 지우는 방법
arr.removeSubrange(0...2)
arr.removeFirst() // 첫 번째 요소 지워
arr.removeFirst(2) // 앞에 두 개 지워
// 주의 : removeFirst()는 리턴으로 Optional이 아니라 그냥 String 타입을 주기 때문에 빈 배열에 대해 실행하면 에러가 발생한다
arr.removeLast(2) // 뒤에 두 개 지워
arr.removeAll()
arr.removeAll(keepingCapacity : true) // 저장 공간을 일단 보관해 두고, 안에 데이터만 지워준다
var nums = [1, 2, 3, 1, 4, 5, 2, 6, 7, 5, 0]
nums.sort() // 배열 자체를 정렬. return 없음.
nums.sorted() // 변경된 배열을 반환. 원본 배열은 건드리지 않는다
// 애플이 함수 이름을 만드는 규칙
nums.reverse()
nums.reversed()
nums.sorted().reversed() // 이런 방식으로 가능
nums.shuffle()
nums.shuffled()
// 활용
// p를 지워
if let lastIndexOfP = puppy1.lastIndex(of : "p") {
puppy1.remove(at : lastIndexOfP)
}
// 열거 named tuple 형태로 전달한다
var nums = [10, 11, 12, 13, 14]
for tuple in nums.enumerated() {
print(tuple)
}
var dic = ["a": "apple", "b": "banana", "c": "city"]
print(dic) // 순서가 없기 때문에 출력할 때마다 순서가 다르게 나온다
// 단축문법
var words : [String: String] = [:]
// 정식문법
let words1 : Dictionary<Int, String>
// 빈 dictionary 생성
let emptyDic1: Dictionary<Int, String> = [:]
let emptyDic2 = Dictionary<Int, String>()
let emptyDic3 = [Int: String]()
// dictionary 기능
dic.count
dic.isEmpty
dic.randomElement() // Optional 타입으로 알려준다. 없으면 nill
// 실제 사용할 때는 if let 바인딩 이용하자
// 원소 접근
dic["a"] // Optional 타입으로 알려줌.
// 무조건 쌍으로. value만 따로 검색하는 방법은 없다
dic.keys
dic.values
dic.keys.sorted()
dic.values.sorted()
// update (insert + replace + append)
words = [:]
words["a"] = "apple" // 추가
words["b"] = "banana"
words["b"] = "blue" // 교체
words.updateValue("city", forKey : "c")
// remove
dic["b"] = nill // 삭제
dic["e"] = nill // 없는거 삭제하려고 해도 아무 일 안일어남
dic.removeValue(forKey : "a")
dic.removeAll()
// 비교
dictionary는 순서가 없기 때문에, 다른 순서로 선언해도 속에 내용만 같으면 true 출력
dic1 == dic2
// value에 array나 dictionary가 들어갈 수 있다
var dic1 = [String : [String]()
var dic2 = [String : [String: Int]()
// 반복문과의 결합
let dict = ["a": "apple", "b": "banana", "c": "city"]
for (key, value) in dict { // tuple 형태로 꺼낼 수 있다
print("\(key) : \(value)")
}
for item in dict {
print("\(item.key) : \(item.value)")
}
for (key, _) in dict {
print("Key : ", key)
}
for (_, value) in dict {
print("Value : ", value)
}
var set: Set = [1, 1, 2, 2, 3, 3, 3]
var set: Set<Int> = [1, 1, 2, 2, 3, 3, 3] // 중복 저장이 안됨 [1, 2, 3]. 순서도 계속 바뀜
// update (리턴값이 있다)
set.update(with : 1) // 이미 있으면 1 반환
set.update(with : 2) // 없는 애면 nill 반환
// remove (얘도 리턴값이 있다)
set.remove(1)
set.remove(100)