[英]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.