簡體   English   中英

在這個使用 reduce() 內部迭代器 function 的示例中,為什么累加器不確認這個數字?

[英]In this example using the reduce() internal iterator function, why won't the accumulator acknowledge this digit?

我在這里有點困惑。 我只是想使用 reduce function 來創建一個字符串,該字符串按編號順序表示列表的元素。 這是代碼:

val names = listOf("John", "Billy", "Tom", "Joe", "Eric", "Jerry") 

val result = names.reduce { accum, name -> "$accum ${names.indexOf(name) + 1}. $name" }

println(result)     // John 2. Billy 3. Tom 4. Joe 5. Eric 6. Jerry

                   // ^ missing 1.  

我期望累加器的值在每次迭代后這樣累加:

“1.約翰”

“1. 約翰 2. 比利”

“1. 約翰 2. 比利 3. 湯姆”

“1. 約翰 2. 比利 3. 湯姆 4. 喬”

“1. 約翰 2. 比利 3. 湯姆 4. 喬 5. 埃里克”

“1. 約翰 2. 比利 3. 湯姆 4. 喬 5. 埃里克 6. 傑瑞”

當我運行代碼時,它會打印:John 2. Billy 3. Tom 4. Joe 5. Eric 6. Jerry

我不明白為什么是“1”。 不見了,

減少 function 使用您的第一個值作為起始累加器。

所以操作只適用於(((1 -> 2) -> 3) -> 4)對之間。

您可以使用折疊function 實現預期的行為,它采用初始值:

val result = names.fold("") { accum, name -> "$accum ${names.indexOf(name) + 1}. $name" }

暫無
暫無

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

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