집단 자료형(배열, 집합)💻

DEVJUN·2022년 4월 27일
1

Swift 문법

목록 보기
3/14
post-thumbnail

스위프트는 서로 관련이 있는 데이터끼리 모아서 관리할 수 있도록 집단 자료형(Collective Types)를 제공한다. 현재 스위프트가 재공하는 집단 자료형은 배열(Array), 집합(Set), 튜플(Tuple), 딕셔너리(Dictionary) 등이 있다.

1. 배열

  배열은 일련의 순서를 가지는 리스트 형식의 값을 저장하는 데에 사용되는 자료형으로 거의 대부분의 언어에서 공통적으로 제공하는 자료형이다. 배열의 인덱스는 순서대로 할당되며 중간에 값을 생략하거나 건너뛰는 경우는 없다.

  스위프트에서 배열은 몇 가지 특징이 있다.

  • 배열에 저장할 아이템의 타입에는 제약이 없지만, 하나의 배열에 저장하는 아이템 타입은 모두 같아야 한다.
  • 선언 시 배열에 저장할 아이템 타입을 명확히 정의해야 한다.
  • 배열의 크기는 동적으로 확장할 수 있음.

  스위프트에서 배열을 정의 하는 방법은 두 가지로, 정적인 방식과 동적인 방식으로 나눌 수 있다. 정적인 방식은 처음부터 배열을 구성하는 아이템을 포함하여 정의하는 방식이다.

     정적인 방식

	var cities = ["Seoul", "New York", "LA", "Santiago"] // 정적배열 선언 및 변수에 대입
	cities[1] // New York
    
    let length = cities.count // 4
    
    //배열 순회 
    for i in 0..<length { 
    	print("\(cities[i])")
    }
    
    //이터레이터로 순회
    for row in cities {
    	print("\(row)")
    }
    
    //배열의 위치를 알려주는 메소드 index(of: )
     for row in cities {
     	let index = cities.index(of: row)
    	print("\(index!) 번째 배열 원소는 \(row)")
    }
    

     동적인 방식

  스위프트에서 배열을 정의하는 객체는 Array이다. 구조체로 정의된 이 객체는 실질적인 배열 데이터를 만드는 데 사용될 뿐 아니라 배열에서 데이터를 효과적으로 다루기 위한 다양한 기능까지 제공해 준다.

  배열을 정의할 때에는 <>(제네릭)기호를 사용하여 배열 내부에서 사용할 아이템 타입을 지정해야 한다.

	
    //첫번째 방식
	var cities = Array<String>() // 문자열 배열의 선언 및 초기화
    
    var cities : Array<String> // 문자열 배열 선언
    cities = Array() // 배열 초기화
    
    //두번째 방식
    var cities = [String]() //배열 선언 및 초기화
    var cities : [String] //배열 선언
    cities = [String]() // 배열 초기화
    cities = [] //배열 초기화 - 두번째 방식
   
    ex)
    
    //case 1
    var cities : [String] // 선언
    cities = [String]() // 초기화
    
    //case 2
    var country : [String] // 선언
    country = [] // 초기화
    
    //case 3
    var list : [Int] = [] //타입 어노테이션 + 초기화
    
    //case 4
    var rows : Array<Float> = [Float]() // 타입 어노테이션 + 제네릭 + 초기화
    
    //case 5
    var tables : [String] = Array() // 타입 어노테이션 + 구방식의 초기화
    

 배열 선언 및 초기화는 다양한 방식이 있기 때문에 각장 익숙한 형태를 선택해서 사용하면 된다!!

   배열 아이템 동적 추가

배열의 아이템을 추가하는 메소드는 3가지가 있다.

  • append(_:) 입력된 값을 배열의 맨 뒤에 추가한다. 아이템 추가 전에 먼저 배열의 크기를 +1 확장하고 인덱스 공간 확보후, 인자값을 마지막 인덱스 위치에 추가한다.
  • insert(_:at:) 아이템을 배열 맨 뒤가 아닌 원하는 위치에 직접 추가하고 싶을 때 사용한다.
  • append(contentsOf:) 배열의 맨 마지막에 아이템을 추가하지만, 개별 아이템이 아니라 여러개의 아이템을 한꺼번에 추가할 때 사용한다.
	var cities = [String]() // []
    
    cities.append("Seoul") // ["Seoul"]
    cities.append("New York") // ["Seoul", "New York"]
    cities.insert("Tokyo", at: 1) // ["Seoul", "Tokyo", "New York"]
    cities.append(contentsOf: ["Dubai", "Sydney"]) // ["Seoul", "Tokyo", "New York", "Dubai", "Sydney"]
    cities[2] = "Madrid" // ["Madrid", "Tokyo", "New York", "Dubai", "Sydney"]
    
    //범위 연산자를 이용한 인덱스 참조
    var alpha = ["a", "b", "c", "d"]
    
    alpha[0...2] // ["a", "b", "c"]
    alpha[1..<2] // ["b"]
    

2. 집합

  집합은 같은 타입의 서로 다른 값을 중복 없이 저장하고자 할 때 사용하는 집단 자료형이다. 배열과 유사하지만 순서를 생각하지 않는다. 집한은 내부적으로 해시(Hash) 연산의 결과값을 이용하여 데이터를 저장하므로 집합에 저장할 데이터 타입은 해시 연산을 할 수 있는 타입이어야 한다. 해시 연산의 결과로 얻을 수 있는 해시값은 일련의 정수로 구성되며, 대상의 값이 같다면 해시 연산에 의한 결과값도 마찬가지로 일치하는 특성이 있다.

	var genres : Set<String> = ["classic", "rock", balad"] // 집합 정의
    
    var genres = Set<String>() //빈 집합
    
    genres.insert("classic")
    genres.insert("rock")
    
    
    //집합 순회

   for g in genres {
       print("\(g)")
   }
   
   for g in genres.sorted() { //알파벳순으로 정렬
       print("\(g)")
   }
   
   //동적 추가와 삭제
   
   genres.insert("jazz") // ["jazz", "classic", "rock", balad"] 
    
    if let removedItem = genres.remove("Rock") {
    	print("아이템 \(removedItem) 삭제")
    }else {
    	print("삭제 타겟 없음!")
    }
    
    genres.removeAll() // 집합 전체 삭제

   집합 연산

  • intersection(_:) 양쪽 집합에서 공통되는 아이템만 선택하여 집합을 만들어주는 메소드(교집합)
  • symmetricDifference(_:) 양쪽 집합 중에서 어느 한쪽에만 있는 아이템을 선택하여 새로운 집합을 만들어주는 메소드
  • union(_:) 양쪽 집합에 있는 모든 아이템을 선택하여 새로운 집합을 만들어주는 메소드(합집합)
  • subtract(_:) 한쪽 집합에 있는 모든 아이템에서 다른 쪽 집합에도 속하는 공통 아이템을 제외하고 새로운 집합을 만들어주는 메소드(차집합)
  	var oddDigits : Set = [1, 3, 5, 7, 9] // 홀수
  	var evenDigits : Set = [0, 2, 4, 6, 8] //짝수
    var primeDigits : Set = [2, 3, 5, 7] // 소수
  
    oddDgits.intersection(evenDigits).sorted() // []
  	oddDgits.symmetricDifference(primeDigits).sorted() // [1, 2, 9]
	oddDgits.union(evenDigits).sorted()// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  
  
  	oddDigits.subtract(primeDigits)
  	oddDigits.sorted() // [1, 9]
  
profile
🧑🏻‍💻iOS

0개의 댓글