- Swift의 Collection Types에 대해서 알아보겠다.
Swift Collection Types
- Swift Collection Types에는 3가지 종류가 있다.
- '배열', '집합', '사전'이 그 주인공이다.
- 각 콜렉션 타입의 대략적인 구도는 다음 사진과 같다.
Swift 배열
- 하나씩 자세히 알아보겠다.
- 배열은 인덱스와 그에에 대응하는 데이터로 이뤄진 자료 구조를 의미한다.
- 배열의 기본 문법은 다음과 같다.
var someInts:Array<Int> = Array<Int>()
- 하지만 배열을 나타낼때 기본 문법을 축약해서도 나타낼수 있고, 이를 더 많이 사용한다.
- 축약 문법은 다음과 같다.
var someInts:[Int] = [Int]()
- 배열 리터럴 문법은 대괄호를 사용하고, 다음과 같이 사용할 수 있다.
var someInts:[Int] = [1,2,3,4]
- 한편, 배열의 인덱스는 0부터 시작하고, 인덱스를 통해 배열의 값을 가져올 수 있다.
var someInts:[Int] = [1,2,3,4]
print("\(someInts[0])")
Swift 집합
- 스위프트 집합은 같은 타입의 데이터가 순서 없이 모여있는 자료구조이다.
- 집합의 문법은 다음과 같다.
var someInts:Set<Int> = Set<Int>()
- 집합은 배열과 달리 축약 문법이 없고, 배열과 같은 리터럴 문법을 사용한다.
var someInts:Set<Int> = [1,2,3,4]
- 집합에는 연산이 있다는 장점이 있다.
- 다음과 같은 연산을 할 수 있습니다.
- 집합 Set 연산의 사용 예시는 다음과 같다.
var oddDigits : Set = [ 1, 3, 5, 7, 9 ]
let evenDigits : Set = [2, 4, 6, 8]
let primeDigits : Set = [2, 3, 5, 7]
oddDigits.intersection(evenDigits)
oddDigits.symmetricDifference(primeDigits)
Swift 딕셔너리
- Swift 딕셔너리 순서가 정해져 있지 않은 데이터에,
- 키 값을 통해 구분할 수 있는 자료구조이다.
- Dictionary의 문법은 다음과 같다.
var someInts:Dictionary<String,Int> = [String:Int]()
- Dictionary의 축약 문법은 다음과 같다.
var someInts:[String:Int] = [String:Int]()
- Dictionary의 리터럴 문법은 다음과 같다.
var airports: [String:String] = ["ICH": "인천공항", "CJU": "제주공항"]
- Dictionary의 데이터는 키 값을 통해 불러올 수 있다.
var airports: [String:String] = ["ICH": "인천공항"]
print("\(airports["ICH"])")
여태까지 개념을 이용한 스위프트 예제
func getWeekDay(atMonth: Int, day: Int) -> String
{
var week: [String] = ["Sat", "Sun", "Mon", "Tues", "Wed", "Thur", "Fri"]
var value: Int = 0
if atMonth == 1
{
value = day
} else if atMonth == 2
{
value = 31 + day
} else if atMonth == 3
{
value = 59 + day
} else if atMonth == 4
{
value = 90 + day
} else if atMonth == 5
{
value = 120 + day
} else if atMonth == 6
{
value = 151 + day
} else if atMonth == 7
{
value = 181 + day
} else if atMonth == 8
{
value = 212 + day
} else if atMonth == 9
{
value = 243 + day
} else if atMonth == 10
{
value = 273 + day
} else if atMonth == 11
{
value = 304 + day
} else if atMonth == 12
{
value = 334 + day
}
return week[value % 7]
}
print(getWeekDay(atMonth: 9, day: 7))
func shoter(num: Int) -> String
{
var num = num
var list: [Int] = []
var value: String = ""
var count: Int = 0
while num > 0
{
list.append(num % 10)
num = num / 10
count = count + 1
}
for index in 0..<(count - 1)
{
if index == count - 2
{
value = String(list[index]) + value
} else if list[index] == list[index + 1]
{
} else
{
value = String(list[index]) + value
}
}
return value
}
print(shoter(num: 112233355))
func allPrimeNumber(endNum: Int) -> Array<Int>
{
var list: [Int] = []
var num: Int = 2
var index: Int = 0
var comp: Int = 1
for _ in 0...(endNum - 2)
{
list.append(num)
num = num + 1
}
while index < list.count
{
while comp < list.count
{
if list[comp] % list[index] == 0
{
list.remove(at: comp)
} else
{
comp = comp + 1
}
}
index = index + 1
comp = index + 1
}
return list
}
print(allPrimeNumber(endNum: 30))
func ceasar(data: Array<String>, keyNum: Int) -> Array<String>
{
var list: [String] = []
var alphabet: [String] = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
var Alphabet: [String] = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
for num in 0..<data.count
{
for index in 0..<alphabet.count
{
var index = index
if data[num] == alphabet[index]
{
if (index + keyNum) > 25
{
index = index - 26
list.append(alphabet[index + keyNum])
} else
{
list.append(alphabet[index + keyNum])
}
}else if data[num] == Alphabet[index]
{
if (index + keyNum) > 25
{
index = index - 26
list.append(Alphabet[index + keyNum])
} else
{
list.append(Alphabet[index + keyNum])
}
}
}
}
return list
}
print(ceasar(data: ["a","D","x"], keyNum: 3))