티스토리 뷰

반응형

안녕하세요 :)

오늘은 Swift에서 Array(배열)/Dictionary(사전)/Set(집합)을 String(문자열)으로 바꾸는 방법을 알려드릴거에요. 




Array(배열)/Dictionary(사전)/Set(집합)을 String(문자열)으로 바꾸는 방법





1. joined사용




var arr = ["a","b","c"]//Array(배열)

var set :Set = ["d","e"]//Set(사전)

var dic : Dictionary = [1:"f",2:"g"]//Dictionary(사전)


일단 뭔가 있어야 문자열로 바꾸겠죠?



var arrToStr =  arr.joined()

print(arrToStr)//"abc"

var setToStr = set.joined()

print(setToStr)//"de"

var dicToStr = dic.values.joined()

print(dicToStr)//"gf" -> 순서없이 나옴.



셋 다 joined()라는 메소드를 사용하여 문자열로 만들어 줄 수 있습니다. 

다만 Dictionary에서 주의해야 할 점이 있는데요, 

먼저 앞서 말씀드린것처럼 문자열로 바꾸는 과정에서 순서를 보장할 수 없습니다. 

또한, 


var dic : Dictionary = [1:"f",2:"g"]

var dicToStr = dic.values.joined()//"gf"

print(dicToStr)


//------------------------------------//


var dic2 :Dictionary = ["f":1,"g":2]

var dic2ToStr = dic2.keys.joined()

print(dic2ToStr)//"gf"


저기 보이시는 것 처럼 Dictionary의 타입이 String인 것만 join할 수 있습니다. 

Int타입을 join하려고 하면 오류가 날 거에요.



나는 문자열로 만들되, 얘네를 구분해주고 싶다! 하시면, joined(separator:)를 쓰시면 됩니다. 

Array, Set, Dictionary사용하는 건 다 똑같으니까 배열만 보여드릴게요. 

 


let arr = ["hello","world","zedd"]

let joinedStr = arr.joined(separator: " , ")

print(joinedStr)//"hello , world , zedd"










2. reduce사용


var arr = ["a","b","c"]//Array(배열)

var set :Set = ["d","e"]//Set(사전)

var dic : Dictionary = [1:"f",2:"g"]//Dictionary(사전)


역시 위 Collection들을 이용하여 reduce를 써보겠습니다. 



var arrToStr = arr.reduce(" ", {$0+$1})

print(arrToStr)//"abc"

var setToStr = set.reduce(" ", {$0+$1})

print(setToStr)//"df"

var dicToStr = dic.values.reduce(" ", {$0+$1})

print(dicToStr)//"gf" -> joined 마찬가지로 순서없이 나옴.


joined는 이름에서 뭔가 합친다는 느낌을 받을 수 있었는데..이건 뭐지...? $0은 뭐지..?

reduce는 Swift의 고차함수중 하나인데요,

reduce도 따로 글을 쓰도록 할게요. 저건 정말 완벽한 축약형.......이라고 할 수 있습니다. 

축약하지 않은 형태는 



var arrToStr = arr.reduce("") { (s1: String, s2: String) -> String in

    return s1+s2

}

print(arrToStr)//"abc"


이거라고 할 수 있겠네요. 



var arrToStr = arr.reduce("", { (s1: String, s2: String) -> String in

    return s1+s2

})

print(arrToStr)//"abc"


이것도 가능합니다. (달라진게 없어보이지만.....소괄호가 전체를 묶었죠)



아무튼..! 오늘은 배열/집합/사전을 문자열로 바꾸는 방법을 알아보았습니다. 

도움이 되었으면 좋겠네요 :)

반응형