Swift Collection Types

  • Swift의 Collection Types에 대해서 알아보겠다.

Swift Collection Types

  • Swift Collection Types에는 3가지 종류가 있다.
  • '배열', '집합', '사전'이 그 주인공이다.
  • 각 콜렉션 타입의 대략적인 구도는 다음 사진과 같다.
swift-collection-types

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])")
//1이 출력됩니다.

Swift 집합

  • 스위프트 집합은 같은 타입의 데이터가 순서 없이 모여있는 자료구조이다.
  • 집합의 문법은 다음과 같다.
var someInts:Set<Int> = Set<Int>()
  • 집합은 배열과 달리 축약 문법이 없고, 배열과 같은 리터럴 문법을 사용한다.
var someInts:Set<Int> = [1,2,3,4]
  • 집합에는 연산이 있다는 장점이 있다.
  • 다음과 같은 연산을 할 수 있습니다.
swift-collection-types
  • 집합 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))