Bibi's DevLog π€π
[Array] contains(_:) + μκ°λ³΅μ‘λ νꡬ λ³Έλ¬Έ
[Array] contains(_:) + μκ°λ³΅μ‘λ νꡬ
λΉλΉ bibi 2023. 1. 26. 00:04[Array] contains(_:) + μκ°λ³΅μ‘λ νꡬ
μνμ€κ° μ£Όμ΄μ§ μμλ₯Ό ν¬ν¨νκ³ μλμ§λ₯Ό λνλ΄λ λΆλ¦¬μΈ κ°μ λ°νν©λλ€.
μ μΈ
func contains(_ element: Self.Element) -> Bool
Element
κ° Equatable
μ μ€μν λ μ¬μ©ν μ μμ΅λλ€.
리ν΄κ°
λ§μ½ μνμ€ λ΄μμ μ£Όμ΄μ§ μμκ° λ°κ²¬λλ©΄ true, κ·Έλ μ§ μμΌλ©΄ false.
νλΌλ―Έν°
element
: μνμ€μμ μ°Ύκ³ μ νλ μμ.
μ€λͺ
μ΄ μμλ μνμ μΊμ€νΈλ₯Ό λ΄κ³ μλ λ°°μ΄μ κ°μ₯ μ’μνλ λ°°μ°κ° μλμ§ λ³΄κΈ° μν΄ νμΈν©λλ€.
let cast = ["Vivien", "Marlon", "Kim", "Karl"]
print(cast.contains("Marlon"))
// Prints "true"
print(cast.contains("James"))
// Prints "false"
볡μ‘λ
O(n), nμ μνμ€μ κΈΈμ΄.
(μλλ μ κ° μμ±ν λ΄μ©μ λλ€)
contains(_:) μ μκ°λ³΅μ‘λ νꡬ
Arrayμμ μκ°λ³΅μ‘λλ O(n) μ΄λΌκ³ 곡μλ¬Έμμμ λ§νλ€.
νμ§λ§ νμνλ μμλ₯Ό 빨리 μ°ΎμΌλ©΄ 빨리 λΆλ¦° κ°μ΄ λ°νλμ§ μμκΉ?
νμνλ μμκ° λ°°μ΄μ μ/μ€μ/λ€μ μμ λ κ°κ° 걸리λ μκ°μ μμ보μλ€.
let startTime = CFAbsoluteTimeGetCurrent()
var arr = Array(repeating: 0, count: 1_000_000)
var arrFirst1 = arr
arrFirst1.insert(1, at: 0)
var arrMiddle1 = arr
arrMiddle1.insert(1, at: arrMiddle1.count / 2)
var arrLast1 = arr
arrLast1.append(1)
print(arrFirst1.contains(1))
// print(arrMiddle1.contains(1))
// print(arrLast1.contains(1))
let endTime = CFAbsoluteTimeGetCurrent()
print(endTime - startTime) // 0.00533902645111084
μμ κ°μ μμ μ½λλ₯Ό λ§λ€μ΄ μ€νμκ°μ μΈ‘μ ν΄ λ³΄μλ€.
0μΌλ‘ μ±μμ§κ³ κΈΈμ΄κ° 1,000,000μΈ λ°°μ΄μ 맨 μ(arrFirst1
), μ€κ°(arrMiddle1
), 맨 λ€(arrLast1
) μ 1μ λ£λλ€.
κ·Έλ¦¬κ³ κ°κ°μ λ°°μ΄μ contains(1)
μ μ μ©νλ©΄ μΌλ§λ 걸리λμ§ μΈ‘μ νλ€.
(μ νν μκ° μΈ‘μ μ μν΄ contains μ€μ νλλ§ λ¨κΈ°κ³ λλ¨Έμ§λ μ£Όμμ²λ¦¬ν΄ μ€ννλ μμΌλ‘ μ§ν)
print(arrFirst1.contains(1)) // 0.00533902645111084
print(arrMiddle1.contains(1)) // 0.03761601448059082
print(arrLast1.contains(1)) // 0.06794404983520508
νμ€ν μ°Ύλ μμκ° λ§¨ μμ μμ λ κ°μ₯ λΉ¨λκ³ , μ°Ύλ μμκ° λ§¨ λ€μ μμΌλ©΄ κ°μ₯ λλ Έλ€.
κ·Έλ¦¬κ³ μ°Ύλ μμκ° μ€κ°μ μμΌλ©΄ μκ°λ μ€κ° μ λλ‘ κ±Έλ Έλ€.
λ°°μ΄μ κΈΈμ΄κ° κΈΈμ΄μ§μλ‘ μ€νμκ°μ μ°¨μ΄κ° νμ€ν λλ¬λ¬λ€.
μλλ λ°°μ΄μ κΈΈμ΄κ° 1,000,000,000μΌ λ (var arr = Array(repeating: 0, count: 1_000_000_000
)μ μ€νμκ°μ΄λ€.
print(arrFirst1.contains(1)) // 14.913639068603516
print(arrMiddle1.contains(1)) // 46.19543790817261
print(arrLast1.contains(1)) // 78.79820799827576
λ§μ§λ§μΌλ‘ μ°Ύλ μμκ° μμ λμ μ€νμκ°μ μ΄λ¨κΉ?
κΈΈμ΄κ° 1,000,000μ΄κ³ 0μΌλ‘λ§ μ±μμ§ μλμ λ°°μ΄ (arr
) μ contains(1)
μ μ μ©ν΄ μΌλ§λ 걸리λμ§ μΈ‘μ ν΄ λ³΄μλ€.
let startTime = CFAbsoluteTimeGetCurrent()
var arr = Array(repeating: 0, count: 1_000_000)
var arrFirst1 = arr
arrFirst1.insert(1, at: 0)
var arrMiddle1 = arr
arrMiddle1.insert(1, at: arrMiddle1.count / 2)
var arrLast1 = arr
arrLast1.append(1)
print(arr.contains(1))
let endTime = CFAbsoluteTimeGetCurrent()
print(endTime - startTime) // 0.06914293766021729
κ²°κ³Όλ μμ κ°μλ€. (λ¬Όλ‘ μ€ν μλ§λ€ μ€μ°¨λ μ‘°κΈμ© μλ€)
print(arrFirst1.contains(1)) // 0.00533902645111084
print(arrMiddle1.contains(1)) // 0.03761601448059082
print(arrLast1.contains(1)) // 0.06794404983520508
print(arr.contains(1)) // 0.06914293766021729
1μ΄ μλ λ°°μ΄μμ 1μ΄ μλμ§ μλμ§ νμΈνλ €λ©΄, κ²°κ΅ λ°°μ΄μ μ 체 μμλ₯Ό λκΉμ§ νμν΄μΌ νλ€.
κ·Έλμ λ°°μ΄μ λ§μ§λ§μ 1μ΄ μλ κ²½μ°(arrLast1
) λ³΄λ€ μ½κ°μ μκ°μ΄ λ κ±Έλ¦° κ²μ νμΈν μ μμλ€.
κ²°λ‘ μ μΌλ‘ Array.contains(_:)
μ μκ°λ³΅μ‘λκ° O(n)μΈ κ²μ λ§μ§λ§ (μκ°λ³΅μ‘λλ μ΅μ
μ κ²½μ°λ₯Ό κ°μ νλ―λ‘), μ΄ λ©μλλ λ°°μ΄μ 첫 μμλΆν° νλμ© νμνλ―λ‘, μ°Ύλ μμκ° μμ μλ€λ©΄ μ΄λ³΄λ€ μ€νμκ°μ΄ 짧μμ§ μ μλ€λ μ¬μ€μ μκ² λμλ€!