在这个使用 reduce() 内部迭代器函数的例子中,为什么累加器不承认这个数字?
In this example using the reduce() internal iterator function, why won't the accumulator acknowledge this digit?
我在这里有点困惑。我只是想使用 reduce 函数创建一个 String 来表示按编号顺序排列的列表元素。这是代码:
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”。不见了,
Reduce 函数使用您的第一个值作为起始累加器。
所以操作仅适用于 (((1 -> 2) -> 3) -> 4)
对。
您可以使用 fold 函数实现预期的行为,该函数采用初始值:
val result = names.fold("") { accum, name -> "$accum ${names.indexOf(name) + 1}. $name" }
我在这里有点困惑。我只是想使用 reduce 函数创建一个 String 来表示按编号顺序排列的列表元素。这是代码:
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”。不见了,
Reduce 函数使用您的第一个值作为起始累加器。
所以操作仅适用于 (((1 -> 2) -> 3) -> 4)
对。
您可以使用 fold 函数实现预期的行为,该函数采用初始值:
val result = names.fold("") { accum, name -> "$accum ${names.indexOf(name) + 1}. $name" }