我有这样的代码,一般来说它工作正常,但是如果有一个最大长单词并且后面跟着长度相同的单词,那么它将只返回1个长单词,而我需要获取最后一个长单词。这就是我的意思,这样的输入:AWord BWord ALongWord BLongWord CLongWord。我的代码将输出 (A)ALongWord,但应该输出 (C)CLongWord,因为它是最新的。
fun main(){
val result1 = readLine()?.split(" ")?.associateWith { it.length }?.maxBy { it.value }.let{it?.key?.get(0)}.let { println(it) }
}
Run Code Online (Sandbox Code Playgroud)
我认为这可以通过减少来完成,但我不太明白如何,可能我的实现需要重做,因为 maxBy 不允许它完成,如果可能的话,修复我的代码或提供您的解决方案。这是一项学习任务,涉及在集合上使用函数。
maxBy查找最大元素的第一次出现,而不是最后一次。
如果您想要最后一个最大元素,您可以简单地在反转( ) 从 中获得的字符串列表maxBy后执行此操作。asReversedsplit
考虑使用maxByOrNull而不是这样maxBy,当用户没有输入任何内容时,您会得到一个null替代异常。
另外,我不确定你为什么要以此为基础制作地图。那是不必要的。您也不应该将 的结果分配let { println(...) }给 a val。那是Unit你想要的对象,而不是结果。
如果您想将结果存储在某处并打印它,请使用also:
val result = readlnOrNull()
?.split(" ")
?.asReversed()
?.maxByOrNull { it.length }
?.also { println(it) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |