Post

스위프트의 배열 딕셔너리

스위프트의 배열 딕셔너리

스위프트에서 배열과 딕셔너리는 다른 객체들의 집합을 담을 수 있는 객체이다 배열과 딕셔너리는 다른 언어들과 큰차이는 없어서 선언 방법과 배열과 딕셔너리에서 사용하는 메소드들을 정리한다

배열

스위프트에서 배열 선언하기

1
2
3
var data : [Int] = [1,2,3,4] //: 인트형 배열
var data2 : [] = [1,2,3,4] //: 인트형 배열
var data3 = [1,2,3,4] //: 타입 추론

배열을 생성할때 초기값을 가지지 않고 생성할 수 있다

1
2
var str1 = [String]() //: 초기값 없이 생성하기
var str2 = [String](repeating: "sadfa", count: 10) //: 해당 문자열 10번 반복해서 초기화

또한 배열 연산(+)를 통해서 새로운 배열을 생성할 수 있다

 

항목 개수

1
2
str1.count //: 해당 배열의 항목수 출력
str1.isEmpty //: 없다면 true 있다면 false

 

섞기와 무작위로 가져오기

1
2
let dataShuffled = data.shuffled() //: 무작위 셔플
let randomdata = data.randomElement() //: 무작위 추출 옵셔널로 나온다

 

삽입과 삭제

1
2
3
data.insert(100,at:2) //: 1, 2, 100, 3, 4 특정 위치에 삽입
data.remove(at:2) //: 삭제
data.removeLast() //: 마지막 항목 삭제

 

혼합 타입의 배열

배열에는 데이터 형태가 다른 데이터도 넣을 수 있다 이때는 Any타입을 이용한다

1
var array : [Any] = [1,"23", "asdf", 123]

위 배열에서 정수형 요소에만 10을 곱하는 반복문을 사용한다면

1
2
3
4
5
6
7
8
for object in array {
	print(object * 18) 
} //:Binary operator '*' cannot be applied to operands of type 'Any' and 'Int' 오류
//: any타입과 Int타입 연산 불가능 하다

for object in array {
	print(object as! Int * 18) 
} //: 배열의 요소르 Int형으로 다운캐스팅 -> 하지만 문자열을 만나면 오류가 발생한다

 

딕셔너리

키와 연관된 값으로 구성된다 키의 데이터 타입과 값 항목의 타입은 타입 애너테이션을 이용해서 구체적으로 지정되거나 타입 추론을 이용해서 컴파일러가 식별하게 한다

 

딕셔너리 리터럴

새로윤 딕셔너리를 초기화 하는것을 딕셔너리 리터럴(literal)이라고 한다

1
2
3
var name: [ Int : String ] = [1:"tom", 2:"dino", 3:"nana"]

var name2 = [Int:String]() //: 빈 딕셔너리를 생성한다

 

딕셔너리 시퀀스 이용

두개의 배열이 존재할 때 두개의 배열을 이용해서 딕셔너리를 만들수 있다 이때 zip() 힘수를 이용한다

1
2
3
4
let keys = ["180-432112", "208-532874", "282-546549", "184-189834"]
let values = ["Wind ni the Wilows", "Tale of Two Cities", "Sense and Sensibility", "ShutterIsland" , "dsaf"]

let bookDict = Dictionary(uniqueKeysWithValues: zip(keys, values))

순서대로 매칭이 되고 만약 개수가 안맞는다면 앞에서 부터 순서대로 매칭되고 나머지는 사라진다

1
let bookDict2 = Dictionary(uniqueKeysWithValues: zip(1..., values))

key값을 1부터 설정할 수도 있다

 

항목 개수

count 이용

 

항목 접근 갱신

1
print(bookDict["180-432112"]) //:키 값을 이용해서 데이터 출력
1
2
3
4
//:항목 갱신
print(bookDict["180-432112", default: "sdfa"]) //: 벨류값을 갱신한다

bookDict["180-432112"] = "fsafdsf" //: 또 다른 갱신 방법 키값이 없다면 추가된다

 

항목 삭제

1
2
3
4
bookDict["300-898871"] = "fasdf"
print(bookDict)

bookDict.removeValue(forKey: "300-898871") //: 키값을 이용해서 삭제

만약 키값이 해당 딕셔너리에 존재하지 않더라도 오류는 발생하지 않는다

 

딕셔너리 반복

1
2
3
for (bookid, title) in bookDict {
    print("Book ID: \(bookid) Title: \(title)")
}
This post is licensed under CC BY 4.0 by the author.