ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

iOS/Swift

[iOS/Swift] Collection Type - Set(์ง‘ํ•ฉ)

Neoguri๐Ÿฆ 2022. 5. 24. 00:01

Set(์ง‘ํ•ฉ)

์˜ค๋Š˜์€ ์ €๋ฒˆ ์‹œ๊ฐ„์— ์ด์–ด Set(์ง‘ํ•ฉ)์— ๋Œ€ํ•ด ํ•œ๋ฒˆ ์•Œ์•„๋ณผ๊ฒŒ์š”!

์ง‘ํ•ฉ์ด๋ผ...
์ง‘ํ•ฉ๋งŽ์ด ๋“ค์–ด๋ณด์…จ์ฃ ? ํ•™๊ต๋‹ค๋‹ ๋•Œ ์ˆ˜ํ•™ ์ˆ˜์—…์—์„œ ๋ฐฐ์šด ์ง‘ํ•ฉ์ด์š”!
์˜ˆ๋ฅผ ๋“ค๋ฉด ์ง‘ํ•ฉ์ด ์žˆ๋Š”๋ฐ, ์ฐจ์ง‘ํ•ฉ ๊ตฌํ•˜๊ณ , ๊ต์ง‘ํ•ฉ ๊ตฌํ•˜๊ณ .. ์ด๋Ÿฐ๊ฒƒ๋“ค!
swift์—์„œ๋„ ์ง‘ํ•ฉ์„ ํ†ตํ•ด ์ฐจ์ง‘ํ•ฉ, ๊ต์ง‘ํ•ฉ ๋“ฑ๋“ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿผ ์•Œ์•„๋ณผ๊นŒ์š”?
๋ฐ”๋กœ ๊ณต์‹๋ฌธ์„œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด์ฃ !


An unordered collection of unique elements.
์ˆœ์„œ๊ฐ€ ์—†๊ณ  ์œ ๋‹ˆํฌํ•œ ์›์†Œ๋ฅผ ๊ฐ€์ง„๋‹ค!
์œ ๋‹ˆํฌํ•˜๋‹ค๋ฉด.. ์ค‘๋ณต๋˜๋Š” ์›์†Œ๊ฐ€ ์—†๋‚˜ ๋ณด๋„ค์š”!
๋„ค ๋งž์Šต๋‹ˆ๋‹ค.
์ง‘ํ•ฉ์—์„œ๋Š” ์ค‘๋ณต๋˜๋Š” ์›์†Œ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•„์š”.
์ €๋ฒˆ์— ๋ฐฐ์› ๋˜ ๋ฐฐ์—ด์ด๋ž‘์€ ๋‹ค๋ฅด์ฃ ?

๋˜.. ๋ฌธ์„œ๋ฅผ ๊ณ„์† ์‚ดํŽด๋ณด๋ฉด
Hashable ์ด๋ผ๋Š” protocol์„ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค๊ณ  ๋‚˜์˜ค๋„ค์š”!
์ด๊ฒƒ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ฉด ์–‘์ด ๋งŽ์•„์„œ ์ผ๋‹จ ๊ณ ์œ ํ•œ ๊ฐ’(ํ•ด์‰ฌ ๊ฐ’) ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๊ณ  ๊ทœ์น™ ์ด๋ผ๊ณ  ํ•˜๊ณ  ๊ฐˆ๊ฒŒ์š”!
์ง‘ํ•ฉ์„ ์—ฌ๋Ÿฌ ํ˜•ํƒœ๋กœ ์„ ์–ธํ•ด๋ณผ๊ฒŒ์š”!

// ๋นˆ ์ง‘ํ•ฉ ์ƒ์„ฑ
var emptySet = Set<String>()

// String์„ ์›์†Œ๋กœ ๊ฐ€์ง€๋Š” ์ง‘ํ•ฉ ์ƒ์„ฑ
// == stringSet: Set<String> = ["neoguri1", "neoguri2"]
var stringSet: Set = ["neoguri1", "neoguri2"]

๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์„ ์–ธ๋˜๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์ฃ ?
ํƒ€์ž…์„ ์ž˜ ์„ ์–ธํ•ด์ค˜์•ผ ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š์•„์š”!

stringSet์„ ๋ณด๋ฉด ์ฃผ์„์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ์˜๋ฏธ์ธ๋ฐ ์ง‘ํ•ฉ ํƒ€์ž…์„ ์„ ์–ธํ•˜๋ฉด์„œ ์›์†Œ์— ๋Œ€ํ•œ ํƒ€์ž…์ด ์—†์ฃ ?
๋ฐ”๋กœ ์„ ์–ธํ•  ๋•Œ ์ง‘ํ•ฉ ์›์†Œ๋ฅผ ๋ณด๊ณ  ํƒ€์ž… ์ถ”๋ก ์„ ์ž๋™์œผ๋กœ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด์—์š”!

์ง‘ํ•ฉ์€ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค๊ณ  ํ–ˆ์ฃ ?
ํ™•์ธํ•ด ๋ณผ๊ฒŒ์š”!


"neoguri"์›์†Œ๋ฅผ 2๊ฐœ๋ฅผ ์ฃผ์—ˆ๋Š”๋ฐ ๊ทธ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ณด๋ฉด ์›์†Œ๊ฐ€ ์ค‘๋ณต์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์—
1๊ฐœ๋งŒ ์žˆ๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ง‘ํ•ฉ์— ์›์†Œ๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ ๋นผ๋„๋ก ํ•ด๋ณผ๊ฒŒ์š”!
์ง‘ํ•ฉ์—์„œ๋Š” ์›์†Œ๋ฅผ ๋„ฃ์„ ๋•Œ insert(:)
์›์†Œ๋ฅผ ์‚ญ์ œํ•  ๋•Œ remove(
:)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


์ง‘ํ•ฉ์€ ์ˆœ์„œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ฝ์ž…, ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์–ด์š”!

์ง‘ํ•ฉ ๋‚ด์—์„œ ํŠน์ • ์›์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋„ ์žˆ์–ด์š”!
๋ฐ”๋กœ contains(_:)์ธ๋ฐ์š” ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„๋ณผ๊ฒŒ์šฉ!


์›์†Œ๊ฐ€ ์žˆ๋‹ค๋ฉด true ์—†๋‹ค๋ฉด false๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค!

์ฒ˜์Œ์— ์ง‘ํ•ฉ์— ๊ต์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ ๋“ฑ๋“ฑ ์šฐ๋ฆฌ๊ฐ€ ์ต์ˆ™ํ•œ
์ง‘ํ•ฉ์˜ ์—ฐ์‚ฐ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ง์”€๋“œ๋ ธ์ฃ ?
์•„๋ž˜์— ๊ธฐ๋ณธ ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์ง„์œผ๋กœ ์ค€๋น„ํ•ด๋ดค์–ด์š”(feat.swift ๊ณต์‹๋ฌธ์„œ)
์‚ดํŽด๋ณผ๊ฒŒ์š”!

  • intersection(_:) ๋‘ ์ง‘ํ•ฉ์˜ ๊ณตํ†ต ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์ƒˆ๋กœ์šด ์ง‘ํ•ฉ์„ ์ƒ์„ฑ(๊ต์ง‘ํ•ฉ)
  • symmetricDifference(_:) ๋‘ ์ง‘ํ•ฉ์˜ ๊ณตํ†ต ๊ฐ’์„ ์ œ์™ธํ•œ ์ƒˆ๋กœ์šด ์ง‘ํ•ฉ์„ ์ƒ์„ฑ
  • union(_:) ๋‘ ์ง‘ํ•ฉ์˜ ๋ชจ๋“  ๊ฐ’์œผ๋กœ ์ƒˆ๋กœ์šด ์ง‘ํ•ฉ์„ ์ƒ์„ฑ(ํ•ฉ์ง‘ํ•ฉ)
  • subtracting(_:) ํŠน์ • ์ง‘ํ•ฉ์˜ ๊ณตํ†ต ๊ฐ’์„ ์ œ์™ธํ•œ ์ƒˆ๋กœ์šด ์ง‘ํ•ฉ(์ฐจ์ง‘ํ•ฉ)
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]

oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersection(evenDigits).sorted()
// []
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]

swift ๊ณต์‹๋ฌธ์„œ์— ์žˆ๋Š” ์˜ˆ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์™€๋ดค์Šต๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์œ„์— ์„ค๋ช…๋œ ๋ฉ”์†Œ๋“œ ๊ฒฐ๊ณผ๊ฐ€ ๋ชจ๋‘ ๋‚˜์˜ค๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!
ํ•œํŽธ, ์ง‘ํ•ฉ๊ด€๊ณ„์—์„œ ํฌํ•จ๊ด€๊ณ„๋‚˜ ์„œ๋กœ ๋‹ค๋ฅธ ๊ด€๊ณ„์— ๋Œ€ํ•ด ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋„ ์žˆ๋Š”๋ฐ์š”
์ฒœ์ฒœํžˆ ์‚ดํŽด๋ณผ๊ฒŒ์š”!


a ๋Š” b ์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ ์ง‘ํ•ฉ a ๋Š” b ์˜ ๋ถ€๋ชจ์ง‘ํ•ฉ (superset), ๋ฐ˜๋Œ€๋กœ b ์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ€ a ์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋‹ˆ๊นŒ ์ง‘ํ•ฉ b ๋Š” ์ง‘ํ•ฉ a ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ (subset) ์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.
์ง‘ํ•ฉ b ์™€ ์ง‘ํ•ฉ c ๋Š” ๊ณตํ†ต ์š”์†Œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ถ„๋ฆฌ์ง‘ํ•ฉ (disjoint) ์ด๋ผ๊ณ  ํ•ด์š”.
์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •๋ฆฌํ•ด ๋ดค์–ด์š”

  • == : ๋‘ ์ง‘ํ•ฉ์ด ๊ฐ™์€์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • isSubset(of:) : ์ง‘ํ•ฉ์ด ํŠน์ • ์ง‘ํ•ฉ์— ๋ชจ๋“  ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • isSuperset(of:) : ์ง‘ํ•ฉ์— ํŠน์ • ์ง‘ํ•ฉ์— ๋ชจ๋“  ๊ฐ’์„ ํฌํ•จ ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • isStrictSubset(of:) ๋˜๋Š” isStrictSuperset(of:) : ์ง‘ํ•ฉ์ด ํŠน์ • ์ง‘ํ•ฉ๊ณผ ๊ฐ™์ง€ ์•Š๊ณ  ๋ถ€๋ถ„์ง‘ํ•ฉ์ธ์ง€ ๋ถ€๋ชจ์ง‘ํ•ฉ์ธ์ง€ ํŒ๋‹จํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • isDisjoint(with:) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‘ ์ง‘ํ•ฉ์ด ๊ณตํ†ต ๊ฐ’์ด ์—†๋Š”์ง€ ํ™•์ธํ•˜๋А ๋ฉ”์†Œ๋“œ

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ swift๊ณต์‹๋ฌธ์„œ์—์„œ ์˜ˆ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์™”์Šต๋‹ˆ๋‹ค.

let houseAnimals: Set = ["๐Ÿถ", "๐Ÿฑ"]
let farmAnimals: Set = ["๐Ÿฎ", "๐Ÿ”", "๐Ÿ‘", "๐Ÿถ", "๐Ÿฑ"]
let cityAnimals: Set = ["๐Ÿฆ", "๐Ÿญ"]

houseAnimals.isSubset(of: farmAnimals)
// true
farmAnimals.isSuperset(of: houseAnimals)
// true
farmAnimals.isDisjoint(with: cityAnimals)
// true

๋ฉ”์†Œ๋“œ๋ฅผ ์ ์šฉํ•˜๊ณ  ๋ฉ”์†Œ๋“œ๊ฐ€ ์›ํ•˜๋Š” ๊ฐ’์ด ๋งž๋‹ค๋ฉด
Boolํƒ€์ž…์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค!

์—ฌ๊ฒจ๊นŒ์ง€ ์ง‘ํ•ฉ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋Š”๋ฐ์š”!
์ต์ˆ™ํ•˜๋˜ ๋ฉ”์†Œ๋“œ๋„ ์žˆ์—ˆ๊ณ , ์ฒ˜์Œ๋ณด๋Š” ๋ฉ”์†Œ๋“œ๋„ ์žˆ์—ˆ๋„ค์š”!
๋‹ค์Œ์—๋Š” dictionary์ฃผ์ œ๋กœ ๋Œ์•„์˜ฌ๊ฒŒ์š”!
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2026/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ