簡體   English   中英

你如何在 swift 中使用 reduce(into:)

[英]How do you use reduce(into:) in swift

我正在閱讀 iOS 13 Programming Fundamentals with Swift,到了關於 reduce() 的部分,我想我或多或少地理解了它,但是還有 reduce(into:) 和這段代碼:

let nums = [1,2,3,4,5]
let result = nums.reduce(into: [[],[]]) { temp, i in 
    temp[i%2].append(i)
}
// result is now [[2,4],[1,3,5]]

所以這段代碼需要一個 Int 數組並將其分成 2 個 arrays,偶數和奇數。 問題是我不知道括號 {} 內發生了什么。

在reduce的情況下,第一個參數是迭代的第一個參數,然后閉包應該一個接一個地處理所有的項目,類似於map()但更強大(這里一個循環足以得到兩個arrays 但使用 map() 我需要 2 個循環,根據書)。

無論如何,我無法理解這里的語法,尤其是“temp”代表什么以及“in”的使用。 以及“append()”如何將值附加到正確的數組?

在閉包內部,“temp”是結果格式,即 [[][]],“i”是每個數字。 正如您所說,它會循環處理所有數字。 當使用 % 時,它返回除法余數,因此對於像“1,3,5”這樣的奇數,它返回“1”,對於偶數“0”,這意味着“temp”將這些值附加到數組中在這些各自的索引中。

因此,如果我們調試並替換常量的變量,結果將是:

temp[1].append(1) //1%2 = 1/2 left 1 [[][1]]
temp[0].append(2) //2%2 = 2/2 left 0 [[2][1]]
temp[1].append(3) //3%2 = 3/2 = 1 left 1 [[2][1,3]]
temp[0].append(4) //4%2 = 4/2 left 0 [[2,4][1,3]]
temp[1].append(5) //5%2 = 5/2 = 2 left 1 [[2,4][1,3,5]]

根據文檔,閉包被順序調用,可變的累積值初始化,當用盡時,返回給調用者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM