티스토리 뷰

Swift

Swift3 ) Dictionary에서 print순서

Zedd0202 2017. 1. 23. 15:08
반응형

for문을 공부하면서 예제 하나를 돌리게 되었는데, 


let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]

for (animalName, legCount) in numberOfLegs {

    print("\(animalName)s have \(legCount) legs")

}

 


를 하면 결과가 어떻게 나올 것 같으세요? 


spiders have 8 legs

ants have 6 legs

cats have 4 legs


라는 결과가 나올 것 같다고 생각하지 않으셨나요?

저도 처음에 당연히 이런결과가 나올 거라고 생각했답니다..ㅎㅎ

그런데


이런 결과가 나왔답니다.

그래서 너무 당황했어요. 뜬금없이 가운데에 있는 ants부터 나오다니..

swift에서의 Dictionary는 알아서 정렬을 해서 프린트를 해주는 건가 싶어서 

그 정렬기준을 알아내려고 해도

a -> s -> c 이라서 알파벳 기준도 아닌 것 같고

6 -> 8 -> 4 라서 숫자 기준도 아니었습니다...

막힐 땐 swift 언어 가이드를 먼저 보는 것이 나을 것 같아서

봤더니!!


"스위프트의 사전 형식에는 정의 된 순서가 없습니다. 그러므로 키, 밸류, 키/밸류 쌍의 순서는 반복문을 돌릴때 정해지지 않습니다. 특정 순서로 사전의 키 또는 값을 반복하려면 keys 또는 values 속성에 sorted () 메서드를 사용합니다"


라고 하네요.

그러면 제가 넣은 순서대로 출력하는 방법은 없을까요?

음..지금 찾아봤는데 그럴거면 배열을 쓰는 것을 나을 것 같네요ㅎㅎ..


하지만 Dictionary 안에 있는 값을 key나 value값으로 정렬해서 출력하고 싶을 수도 있겠죠?

sort 방법은 하나 예제를 알려드리자면,


let order = numberOfLegs.keys.sorted(by: <)

print(order)

 


결과 => ["ant", "cat", "spider"]




let order = numberOfLegs.values.sorted(by: <)

print(order)

 


결과 => [4, 6, 8]




나는 key와 value들을 한꺼번에 정렬해서 출력해주고 싶다! 하면

let order = numberOfLegs.sorted(by: <)

print(order)

 



결과 => [("ant", 6), ("cat", 4), ("spider", 8)]




애플 개발자 문서에서 sorted 함수의 원형을 보시면 


func sorted(by areInIncreasingOrder: ((key: Key, value: Value), (key: Key, value: Value)) -> Bool) -> [(key: Key, value: Value)]



여기서  areInIncreasingOrder는 함수 형태인 것 같은데..
이 areInIncreasingOrder부분에 <(less-than operator) 또는 >(greater-than operator)를 사용해도 된다고 나와있네요 :) 
원하시는 정렬 순서대로 파라미터를 달리 넣어주면 될거같네요!!


도움이 되었으면 좋겠어요 🙏


반응형