zip(_:_:)
func zip<Sequence1, Sequence2>(
_ sequence1: Sequence1,
_ sequence2: Sequence2
) -> Zip2Sequence<Sequence1, Sequence2> where Sequence1 : Sequence, Sequence2 : Sequence
๋ ๊ฐ์ sequence๋ก ๊ตฌ์ฑํ sequence ์์ ๋ง๋๋ ํจ์์ด๋ค.
Array, String, Range์ฒ๋ผ Sequence ํ๋กํ ์ฝ์ ์ฑํํ ํ์ ์ด ๋งค๊ฐ๋ณ์๋ก ์จ๋ค. ์ฆ, ์์๊ฐ ์๋ ํ์ ์ ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ง๋ค
ํํ sequence ๋ฐํ
zip์ ์ฌ์ฉํด ๋ sequence๋ฅผ ํฉ์น๋ฉด ๊ฐ ์์๋ค์ด ๋์ผํ ์ธ๋ฑ์ค ์์๋ค๊ณผ ์ง์ ์ง์ด ํํ ํ์ ์ Zip2Sequence๊ฐ ๋ฐํ๋๋ค.
let strArray = ["๊ฐ", "๋"]
let intArray = [1, 2]
let zipped: Zip2Sequence<[String], [Int]> = zip(strArray, intArray)
for-in ๊ตฌ๋ฌธ์ zip ์ฌ์ฉํ๊ธฐ
zip์ ๋ ๊ฐ์ sequence ์์๋ฅผ ๋์์ ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ ์ฉํ๋ค. zip์ ํตํด ๊ฐ ์์์ ์ sequence๋ฅผ ๋ง๋ค๊ณ ๋ฐ๋ก ๋ฐ๋ณต(iterate)ํ๋ฉด ๋๋ค.
๋ง์ฝ ๋ sequence์ ๊ธธ์ด๊ฐ ๋ค๋ฅด๋ฉด, ๊ธธ์ด๊ฐ ์งง์ sequence์ ๋ง์ถฐ Zip2Sequnece๊ฐ ์์ฑ๋๋ค.
let info = ["1๋ฐ", "2๋ฐ", "3๋ฐ"]
let name = ["๊น์ํฌ", "์ด์ฒ ์"]
for (i, n) in zip(info, name) {
print(i, n, separator: " ")
}
// Prints
// 1๋ฐ ๊น์ํฌ
// 2๋ฐ ์ด์ฒ ์
์ฝ๋ฉํ ์คํธ
์ฝ๋ฉํ ์คํธ ๊ธฐ์ด ๋ฌธ์ ๋ฅผ ํ๋ค๋ณด๋ฉด String์ ์์ฃผ ๋ง๋๊ฒ ๋๋๋ฐ, Int๋ฅผ ์ฌ์ฉํ๋ Array์ ๋ค๋ฅด๊ฒ String์ ๊ฐ๋ณ ์์์ ์ ๊ทผํ๋ ค๋ฉด String.Index๊ฐ ํ์ํ๋ค. ๊ทธ๋์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ป๊ธฐ ์ํด startIndex ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํด์ผํ๋ค. ๋ ํน์ ์์น์ ์์์ ์ ๊ทผํ๊ธฐ ์ํด์ index(_:offsetBy:)์ ํตํด String.index๋ฅผ ๊ตฌํด์ผํ๋ค. ์ด์ธ String.Index๋ฅผ ๋ฐํํ๋ ๋ค์ํ ๋ฉ์๋๋ค์ด ์๋ค.
๋ชจ๋ ์์๋ฅผ ํ ๋ฒ์ฉ ์ ๊ทผํ๋ ๊ฒฝ์ฐ, O(n) ์๊ฐ์ด ์์๋๋ index(_:offsetBy:)๋ฅผ ๋งค๋ฒ ์ฌ์ฉํ๋ ๊ฑด ๋นํจ์จ์ ์ด๋ค. ์ด๋ด ๋๋ for-in ๊ตฌ๋ฌธ์ด๋ forEach ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ง์ฝ ๋์์ ๋ String์ ์์๋ฅผ ํ์๋ก ํ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ์ด๋ด ๋ ๋ฐ๋ก zip ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
let str1 = "๊ฐ๋๋ค๋ผ"
let str2 = "1234"
var result = ""
let zipped = zip(str1, str2)
for (fir, sec) in zipped {
result.append(fir)
result.append(sec)
}
print(result)
// Prints ๊ฐ1๋2๋ค3๋ผ4
zip(_:_:)
'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Swift ] Swift๋? (0) | 2023.10.08 |
---|---|
[ Swift ] isCase | isLowercase | isUppercase (0) | 2023.10.04 |
[ Swift ] print(_:separator:terminator:) (0) | 2023.10.04 |
[ Swift ] ํ๋กํ ์ฝ ์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2023.09.24 |
[ Swift ] Serialization์ด๋? (0) | 2023.01.18 |