๐ŸŽ iOS & Swift

[Swift/Algorithm] dictionary default value ์‚ฌ์šฉํ•˜๊ธฐ

taeeekki 2022. 9. 8. 13:46

๋‹ค์Œ ๊ธ€์€ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ๋‚จ๊ธฐ๊ธฐ ์œ„ํ•œ ๊ธ€์ด๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€๊ฑฐ๋‚˜ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด dictionary๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ˆœ๊ฐ„์ด ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ๋‹ค. (..๋Š” ์˜ˆ์ „์—๋Š” array๋งŒ ์ฃผ๊ตฌ์žฅ์ฐฝ ์ผ์—ˆ์ง€.. ์ ์ ˆํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ ์žฌ์ ์†Œ์— ์“ฐ๋Š” ๊ฒƒ๋„ ์‹ค๋ ฅ์ธ ๊ฒƒ์„ ๋‚ ์ด ๊ฐˆ์ˆ˜๋ก ๋А๋‚€๋‹ค..) ๋ญ ์—ฌํŠผ dictionary๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์˜ˆ์ œ๊ฐ€ ์•„๋งˆ ๋นˆ๋„๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ถ€๋ถ„์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜ํ™” ์žฅ๋ฅด๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

let genres = ["comedy", "romance", "comedy" , "comedy" , "action"]

์ฝ์–ด๋ณด๋ฉด ์ฝ”๋ฏธ๋”” ์žฅ๋ฅด๊ฐ€ 3ํŽธ, ๋กœ๋งจ์Šค ์žฅ๋ฅด๊ฐ€ 1ํŽธ, ์•ก์…˜ ์žฅ๋ฅด๊ฐ€ 1ํŽธ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดˆ๋“ฑํ•™์ƒ๋„ ์•Œ ๊ฒƒ์ด๋‹ค. ๊ทผ๋ฐ ์ปดํ“จํ„ฐ๋Š” ๋ชจ๋ฅธ๋‹ค. ์•Œ์•˜๋‹ค๋ฉด ๋ฌธ์ œ๋ฅผ ์ข€ ๋” ํŽธํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๊ฒ ์ง€.. ๊ฐ ์žฅ๋ฅด๊ฐ€ ๋ช‡ ํŽธ ์กด์žฌํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ ๋กœ์ง์„ ์งœ์•ผ ํ• ํ…๋ฐ ์ง๊ด€์ ์œผ๋กœ dictionary ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์จ์•ผ๊ฒ ๋‹ค๋Š” ๋А๋‚Œ์ด ์˜จ๋‹ค. (array๋„ ์“ธ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ dictionary๊ฐ€ ๋” ์ ํ•ฉํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ์ˆœ์„œ ๊ณ ๋ คํ•  ํ•„์š” ์—†์ด ๊ทธ๋ƒฅ ๊ฐœ์ˆ˜๋งŒ ์„ธ๋ฉด ๋˜๋‹ˆ๊น)

 

๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ธฐ ์œ„ํ•ด ์ด์ „์— ์งฐ๋˜ ์ฝ”๋“œ๋ฅผ ์ž ๊น ๋“ค๊ณ  ์™€๋ณด๊ฒ ๋‹ค.

let genres = ["comedy", "romance", "comedy" , "comedy" , "action"]
var dict = [String: Int]()

genres.forEach {
    if let count = dict[$0] {
        dict[$0] = count + 1
    } else {
        dict[$0] = 1
    }
}

// Prints
// ["action": 1, "comedy": 3, "romance": 1]

๋นˆ dictionary๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ  genre ๋ฐฐ์—ด์„ ๋Œ๋ฉด์„œ key๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ์€ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด์„œ value๋ฅผ 1๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ๊ธฐ์กด์— ๊ฐ’์ด ์กด์žฌํ•˜๋˜ ๊ฒƒ์€ value๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค. dictionary๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ๊ฐ genre์— ํ•ด๋‹นํ•˜๋Š” ์˜ํ™”์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ๋งŒ ํ•ด๋„ ๋˜๊ฒ ์ง€๋งŒ, ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ๊ฐ€ ์‹ซ๋‹ค. ๊ทธ๋ƒฅ ์ƒˆ๋กญ๊ฒŒ key๋ฅผ ์ถ”๊ฐ€ํ• ๋•Œ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ์—ญ์‹œ๋‚˜ Subscript์— default ๊ฐ’์„ ์ •ํ•ด์ฃผ๋Š” ํ˜•ํƒœ๊ฐ€ ์žˆ์—ˆ๋‹ค. (์—ญ์‹œ Apple.. ๐ŸŽ ... ์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ Python์—๋„ ์žˆ๋‹ค ใ…‹..)

 

key๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด default ๊ฐ’์œผ๋กœ ์ •ํ•ด๋‘” ๊ฐ’์œผ๋กœ ๊ทธ๋ƒฅ key๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

// ๊ฐœ์„  1: dictionary default ๊ฐ’ ํ™œ์šฉ
let genre = ["comedy", "romance", "comedy" , "comedy" , "action"]
var dict = [String: Int]()

genre.forEach { dict[$0, default: 0] += 1 }

print(dict)

// Prints
// ["action": 1, "comedy": 3, "romance": 1]

์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์กŒ๊ณ  ๋‚ด ๋งˆ์Œ๋„ ํŽธํ•ด์กŒ๋‹ค. ์ตœ๊ทผ์— Swift์˜ ์ฃผ์–ด์ง„ ๋ฌธ๋ฒ•์„ ์ž˜ ํ™œ์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž˜ ์ž‘์„ฑํ•˜๋„๋ก ์—ฐ์Šต ์ค‘์ธ๋ฐ ์žฌ๋ฏธ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ณ ์ฐจํ•จ์ˆ˜๋ฅผ ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ๋˜๊ณ  ์‹ถ๋‹ค. ๋ฌผ๋ก  ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ๊ฐœ์„ ํ•˜๋Š”๋ฐ์—๋งŒ ์น˜์šฐ์น˜์ง€๋Š” ๋ง์ž.