데이터타입 고급 - 컬렉션형

hoBahk·2021년 6월 13일
0

1. 타입 별칭

스위프트에서는 기본으로 제공하는 데이터 타입과 사용자가 임의로 만든 데이터 타입에 임의로 다른 이름을 부여할 수 있다.

ex)

typealias MyInt = Int
typealias YourInt = Int
typealias MyDouble = Double

let age: MyInt = 100
var year: YourInt = 2080

year = age

let month: Int = 7
let percetage: MyDouble = 99.9

2. 튜플

튜플은 타입의 이름이 따로 지정되어 있지 않고, 내 마음대로 만드는 타입이다.
'지정된 데이터의 묶음'이라고 표현할 수 있고, C언어의 구조체와 비슷하다.

ex)

var person: (String, Int, Double) = ("park", 90, 170.5)

print("이름: \(person.0), 나이: \(person.1), 키: \(person.2)")

person.1 = 75
person.2 = 184.5

print("이름: \(person.0), 나이: \(person.1), 키: \(person.2)")

//튜플의 요소마다 이름을 붙여줄 수 있다.
var personString: (name: String, weight: Int, height: Double) = ("park", 90, 170.5)

print("이름: \(personString.name) 몸무게: \(personString.weight), 이름: \(personString.height)")

//튜플에도 별칭을 지정할 수 있다.
typealias PersonTuple = (name: String, weight: Int, height: Double)

let park: PersonTuple = ("Park", 90, 170.5)
let tom: PersonTuple = ("Tom", 75, 185,4)

print("이름: \(park.name), 몸무게: \(park.weight), 키: \(park.height)")
print("이름: \(tom.name), 몸무게: \(tom.weight), 키: \(tom.height)")

3.배열

배열은 같은 타입의 데이터를 일렬로 나열한 후 순서대로 저장하는 형태의 컬렉션 타입이다.
스위프트의 Array는 C언어의 배열처럼 한 번 선어하면 크기가 고정되는 버퍼가 아니라 필요에 따라 자동으로 버퍼의 크기를 조절해주어 자유롭게 요소의 삽입 및 삭제를 할 수 있다.

ex)배열 선언

var animal1:Array<String> = ["cat", "puppy", "tiger"]
var animal2: [String] = ["cat", "puppy", "tiger"]

var emptyArray1: [Any] = [Any]()
var emptyArray2: [Any] = Array<Any>()
var emptyArray3: [Any] = []

print("animal1: \(animal1)")
print("animal2: \(animal2)")

print("emptyArray1: \(emptyArray1)")
print("emptyArray2: \(emptyArray2)")
print("emptyArray3: \(emptyArray3)")

result

animal1: ["cat", "puppy", "tiger"]
animal2: ["cat", "puppy", "tiger"]
emptyArray1: []
emptyArray2: []
emptyArray3: []
  • 배열 추가 및 삭제

    firstIndex(of:)메서드를 사용하면 해당 요소의 인덱스를 알 수 있다.
    append(_:)메서드를 사용하면 맨 뒤에 요소를 추가할 수 있다.
    insert(_:)메서드를 사용하면 중간에 요소를 추가할 수 있다.
    remove(_:)매서드를 사용하면 해당요소를 삭제하고 반환한다.

ex)

var names: [String] = ["park", "chulsoo", "younghe", "park"]
print(names[2])

names[2] = "jenny"
print(names[2])

names.append("elsa")
names.append(contentsOf: ["jhon", "max"])
names.insert("happy", at:2)
names.insert(contentsOf: ["jinhee", "minsoo"], at:5)

print(names)
print(names[4])
print(names.firstIndex(of: "park"))
print(names.firstIndex(of: "sally"))
print(names.first)
print(names.last)

let firstItem: String = names.removeFirst()
let lastItem: String = names.removeLast()
let indexZeroitem: String = names.remove(at: 0)


print(firstItem)
print(lastItem)
print(indexZeroitem)
print(names[1...3])

result

younghe
jenny
["park", "chulsoo", "happy", "jenny", "park", "jinhee", "minsoo", "elsa", "jhon", "max"]
park
Optional(0)
nil
Optional("park")
Optional("max")
park
max
chulsoo
["jenny", "park", "jinhee"]

4.딕셔너리

딕셔너리는 요소들이 순서없이 key&value 형식으로 구성되는 컬렉션 타입이다.

ex)딕셔너리 선언 및 생성

typealias StringIntDictoinary = [String: Int]

//var numberForName: Dictionary<String, Int> = Dictionary<String, Int>()
//var numberForName: [String: Int] = [String: Int]
//var numberForName: StringIntDictoinary = StringIntDictoinary()
//var numberForName: [String: Int] = [:]

var numberForName: [String: Int] = ["A": 100, "B": 200, "C": 300]

print(numberForName)
print(numberForName)

딕셔너리의 키는 중복될 수 없고 유일해야 한다.
removeValue(forkey:) 메서드를 사용하면 특정키의 해당하는 값을 제거할 수 있다.

ex)딕셔너리 사용

var numberForName: [String: Int] = ["A": 100, "B": 200, "C": 300]

print(numberForName)

print(numberForName["A"])
print(numberForName["B"])

numberForName["A"] = 150
print(numberForName["A"])

numberForName["D"] = 400
print(numberForName["D"])

print(numberForName.removeValue(forKey: "C"))
print(numberForName.removeValue(forKey: "C"))

print(numberForName["C", default:10])

result

["B": 200, "A": 100, "C": 300]
Optional(100)
Optional(200)
Optional(150)
Optional(400)
Optional(300)
nil
10
nil

5.세트

세트는 같은 타입의 데이터를 순서 없이 하나의 묶음으로 저장하는 형태의 컬렉션 타입이다.
세트 내의 값은 모두 유일한 값, 즉 중복된 값이 존재하지 않는다.
세트는 보통 순서가 중요하지 않거나 각 요소가 유일한 값이어야 하는 경우에 사용한다.
세트의 요소로는 해시 가능한 값이 들어와야 한다.

ex)세트의 선언 및 생성

//var exSet: Set<String> = Set<String>()
//var exSet: Set<String> = []
var exSet: Set<String> = ["A", "B", "C", "D"]

var numbers = [100, 200, 300]
print(type(of: numbers))
print(exSet.isEmpty)
print(exSet.count)

ex)세트의 사용

var exSet: Set<String> = ["A", "B", "C", "D"]

exSet.insert("E")
print(exSet.count)

print(exSet.remove("B"))
print(exSet.remove("X"))

ex)세트의 활용 - 집합연산

let englishClassStudents: Set<String> = ["A", "B", "C"]
let koreanClassStudents: Set<String> = ["B", "C", "D", "E", "F"]

//교집합 result = {"B", "C"}
let intersectSet: Set<String> = englishClassStudents.intersection(koreanClassStudents)

//여집합 result = {"A", "D", "E", "F"}
let symmetricDiffSet: Set<String> = englishClassStudents .symmetricDifference(koreanClassStudents)

//합집합 result = {"A", "B", "C", "D", "E", "F"}
let unionSet: Set<String> = englishClassStudents.union(koreanClassStudents)

//차집합 result = {"A"}
let subtractSet: Set<String> = englishClassStudents.subtracting(koreanClassStudents)

ex)세트의 활용 - 포함관계 연산

let englishClassStudents: Set<String> = ["A", "B", "C"]
let koreanClassStudents: Set<String> = ["B", "C", "D", "E", "F"]

//교집합 result = {"B", "C"}
let intersectSet: Set<String> = englishClassStudents.intersection(koreanClassStudents)

//여집합 result = {"A", "D", "E", "F"}
let symmetricDiffSet: Set<String> = englishClassStudents .symmetricDifference(koreanClassStudents)

//합집합 result = {"A", "B", "C", "D", "E", "F"}
let unionSet: Set<String> = englishClassStudents.union(koreanClassStudents)

//차집합 result = {"A"}
let subtractSet: Set<String> = englishClassStudents.subtracting(koreanClassStudents)

let bird: Set<String> = ["비둘기", "앵무새", "까치"]
let mammal: Set<String> = ["고양이", "호랑이", "곰"]
let animals: Set<String> = bird.union(mammal)

print(bird.isDisjoint(with: mammal)) //서로 배타적인지 - true
print(bird.isSubset(of: animals))  //bird가 animals의 부분집합인가요?
print(animals.isSubset(of: mammal)) //animals는 mammal의 전체집합인가요? - true
print(animals.isSubset(of: bird)) //animals는 bird의 전체집합인가요? - true
profile
호박에 줄 그어서 수박 되는 성장 드라마

0개의 댓글