seq.reduce(into:_:)
// declaration
func reduce<Result>(
into initialResult: Result,
_ updateAccumulatingResult: (
_ partialResult: inout Result, // โญ๏ธ inout parameter
Self.Element
) throws -> () // โญ๏ธ no return value
) rethrows -> Result

ไฝฟ็จๆญคๆนๆณๆ๏ผไธๅฎ่ฆๅจ updateAccumulatingResult ้ๅ closure ็ function body ่ฃก้ขๆดๆฐ partialResult ้ๅ inout ๅๆธ๏ผreduce(into:_:) ๅฐฑๆฏ้้ๆดๆฐๆญคๅๆธ๏ผๆๅพๅๅฐๆญคๅๆธ็็ดฏ็ฉๆดๆฐ็ธฝ็ตๆ (accumulating result) ็ถๆ return value ๅณๅใ้ไนๆฏ็บไป้บผ้ๅ closure ็จฑ็บ updateAccumulatingResult ไบ๏ผๅ ็บไฝ ๅฟ ้ ๅจๅฎ็ body ่ฃก้ข "update" accumulating result (partialResult)ใ๐ ๆฏ่ผ๏ผseq.reduce(_:_:)
่จป๏ผๆ่ช็บ Apple ๅจ้ๅๆนๆณ็ๅๆธๅ็จฑไธ๏ผๆใๅฝๅไธไธ่ดใ็ๅ้กใๆข็ถ closure ็จฑ็บ updateAccumulatingResult๏ผ้ฃ้บผ partialResult ้ๅ inout ๅๆธๅฐฑๆ่ฉฒๅฝๅ็บ accumulatingResult ๆๆฏ่ผไธ่ดใ
๐ stackoverflow
let numbers = [1, 1, 2, 2, 2, 3, 4, 4, 5, 4, 3]
// โญ๏ธ filter adjacent equal entries: [1, 2, 3, 4, 5, 4, 3]
// โญโโ1โโโฎ โญโ2โโโฎ
let filtered = numbers.reduce(into: [Int]()) { result, n in
if n != result.last { result.append(n) }
// โฐโโโโโ 3 โโโโโโโฏ
}
// โญ๏ธ 1. intial result: empty array
// โญ๏ธ 2. accumulating result (inout parameter)
// โญ๏ธ 3. update accumulating result in closure body
Last updated
Was this helpful?