在这个使用 reduce() 内部迭代器函数的示例中,为什么累加器不会确认这个数字?



我有点困惑。我只是想使用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。Billy">

"1.约翰2。比利3。汤姆">

"1.约翰2。比利3。汤姆4。乔;

"1.约翰2。比利3。汤姆4。乔5。孙;

"1.约翰2。比利3。汤姆4。乔5。孙6。Jerry">

当我运行代码时,它会打印:John 2。比利3。汤姆4。乔5。孙6。Jerry

我不明白为什么;1.";丢失,

Reduce函数使用您的第一个值作为起始累加器。

因此运算仅适用于(((1 -> 2) -> 3) -> 4)对之间。

您可以通过折叠功能实现预期行为,该功能取初始值:

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

相关内容

  • 没有找到相关文章

最新更新