Search
Duplicate

contains(_:)

์ƒ์„ฑ์ผ
2024/07/09 14:26
ํƒœ๊ทธ
Grammar

contains(_:)

Array๋‚˜ Set ๋“ฑ์˜ Collection์—์„œ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” element๋ฅผ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.
์Šค์œ„ํ”„ํŠธ์—์„  ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ contains(_:) ํ•จ์ˆ˜์ด๋‹ค.

Array์—์„œ์˜ contains(_:)

ย contains(Element) โ†’ Bool

func contains(_ element: Element) -> Bool // Available when Element conforms to Equatable. // Equatable : ์„œ๋กœ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‹ค ๋œ๋‹ค๋Š” ๋œป
Swift
๋ณต์‚ฌ
์œ„์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, Array Sequence์— ์ฐพ๊ณ ์ž ํ•˜๋Š” element๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , Boolean ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค๊ณ  ํ•œ๋‹ค.
let arrayInt: [Int] = [1, 2, 3, 4, 5] let target: Int = 3 arrayInt.contains(target) ? print("\(target) ์žˆ์Œ!") : print("\(target) ์—†์Œ!") // 3 ์žˆ์Œ!
Swift
๋ณต์‚ฌ
Intํ˜• ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ํƒ€์ž…๋“ค๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
let arrayDouble: [Double] = [1.0, 2.0, 3.0, 4.0] let target: Double = 3.0 if !arrayDouble.contains(target) { print("\(target)์žˆ์Œ!") } else { print("\(target)์—†์Œ!") } // 3.0์žˆ์Œ!
Swift
๋ณต์‚ฌ

ย contains(where: (Element) โ†’ Bool) โ†’ Bool

func contains(where predicate: (Element) throws -> Bool) rethrows -> Bool
Swift
๋ณต์‚ฌ
์ฃผ์–ด์ง„ predicate๋ฅผ Element๊ฐ€ ๋งŒ์กฑํ•˜๋Š”์ง€ ํŒ๋ณ„ํ•ด์„œ Bool ํƒ€์ž…์˜ ๊ฐ’์œผ๋กœ ๋ฆฌํ„ดํ•ด์ค€๋‹ค
โ€ข
ํด๋กœ์ €๋ฅผ ์ด์šฉํ•ด์„œ ์กฐ๊ฑด์„ ํ˜•์„ฑํ•ด ์ค„ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.
let arrayInt: [Int] = [1, 2, 3, 4, 5] let hadEvenNum = arrayInt.contains { element -> Bool in if element % 2 == 0 { print("true") return true } else { print("false") return false } } print(hadEvenNum) // 'hadEvenNum' == true
Swift
๋ณต์‚ฌ
์œ„์™€ ๊ฐ™์ด, Sequence์—์„œ ๋ฃจํ”„๋ฌธ์„ ํ†ตํ•ด ๊ฐ ์š”์†Œ์— ์ ‘๊ทผํ•ด ํ›„ํ–‰ ํด๋กœ์ €์— ์ฃผ์–ด์ง„ ์กฐ๊ฑด์ด ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ์— ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ข…๋ฃŒ๋œ๋‹ค.
์ด๋•Œ, contains ๋ฉ”์„œ๋Š” O(n)์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.
์ถ”๊ฐ€๋กœ ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ ๋‹น์—ฐํžˆ ์ธ์ž ๊ฐ’์„ ์ถ•์•ฝํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
let nums = [1, 2, 3, 4, 5] let hadOddNum = nums.contains { $0 % 2 == 1 } // 'hadOddNum' == true
Swift
๋ณต์‚ฌ

Set์—์„œ์˜ contains(_:)

func contains(_ member: Element) -> Bool
Swift
๋ณต์‚ฌ
โ†’ ๋ณต์žก๋„๋Š” O(1)

Set

@frozen struct Set<Element> where Element: Hashable
Swift
๋ณต์‚ฌ
Set์ด Hashable ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
Hash๋Š” hash function์„ ํ†ตํ•ด key & value ์Œ์„ ์ด๋ฃจ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
Hash๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, Hash Collision(ํ•ด์‹œ ์ถฉ๋Œ)์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ Chaining์ด ์ผ์–ด๋‚˜๊ณ , ์ตœ์•…์˜ ๊ฒฝ์šฐ Hash์˜ LinkedList๋ฅผ ์ฐจ๋ก€๋กœ ์‚ดํŽด๋ณด์•„์•ผ ํ•œ๋‹ค๋ฉด, O(n)์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๊ฒ ์ง€๋งŒ, ํ‰๊ท ์ ์œผ๋กœ ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฒ€์ƒ‰์„ ํ•˜๋Š”๋ฐ O(1) ์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
๋”ฐ๋ผ์„œ Swift์—์„œ ์ œ๊ณตํ•˜๋Š” Set ๋˜ํ•œ Hashable ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Search์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” contains(_:) ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ‰๊ท ์ ์œผ๋กœ O(1) ์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

String์—์„œ์˜ contains(_:)

var string = "Swift is awesome!" let target = "some" if string.contains(target) { print("\(target) ์žˆ์Œ!") }
Swift
๋ณต์‚ฌ

Reference