Kotlin 我如何将此更改为“使用”;for loop";而不是“forEach”`
我正在努力将其更改为使用for循环,并且仍然执行相同的操作 程序应该读取一些航班的文件,程序的这一特定部分需要使用用户输入的两个不同日期读取文件,然后需要显示每个航班和每天有多少乘客 现在它是如何工作的,但我正试图将其更改为使用for循环,正如我之前所说的,但不起作用,因为我不知道如何做与map相同的事情,但只是在Kotlin 我如何将此更改为“使用”;for loop";而不是“forEach”`,kotlin,Kotlin,我正在努力将其更改为使用for循环,并且仍然执行相同的操作 程序应该读取一些航班的文件,程序的这一特定部分需要使用用户输入的两个不同日期读取文件,然后需要显示每个航班和每天有多少乘客 现在它是如何工作的,但我正试图将其更改为使用for循环,正如我之前所说的,但不起作用,因为我不知道如何做与map相同的事情,但只是在有趣的时间间隔中 fun interval(reservas: List<Reservas>, dayInferior: Int, daySuperior: Int) {
有趣的时间间隔中
fun interval(reservas: List<Reservas>, dayInferior: Int, daySuperior: Int) {
val map = mapReservas(reservas)
for(day in dayInferior..daySuperior) {
map.forEach {
val reservasNum = it.key.first
val reservasDay = it.key.second
val reservasCount = it.value.count()
if (reservasDay == day) {
println("$reservasNum has $reservasCount passengers on day $day")
}
}
}
println()
println("Press Enter")
readLine()
}
fun mapReservas(reservas: List<Reservas>): Map<Pair<String, Int>, List<Reservas>> {
val map = mutableMapOf<Pair<String, Int>, MutableList<Reservas>>()
for (reserva in reservas) {
val key = reserva.numFlight to reserva.day
val list = map[key] ?: mutableListOf()
list.add(reserva)
map[key] = list
}
return map
}
fun interval(预订:列表,daySuperior:Int,daySuperior:Int){
val map=mapReservas(保留)
用于(每日下级..每日上级){
弗雷奇地图{
val reservasNum=it.key.first
val reservasDay=it.key.second
val reservasCount=it.value.count()
如果(预订日==天){
println($reservasNum在第天$day有$RESERVASCONT乘客)
}
}
}
println()
println(“按回车键”)
readLine()
}
趣味地图保留(保留:列表):地图{
val map=mutableMapOf()
for(保留中的保留){
val key=reserva.numFlight to reserva.day
val list=map[key]?:mutableListOf()
列表。添加(保留)
映射[键]=列表
}
返回图
}
如果在映射上使用for循环进行迭代
则每个元素都是对
。如果您编写(pair,list)
则会对每个pair进行解构,它们本身由pair
和list
组成
fun interval(reservas: List<Reservas>, dayInferior: Int, daySuperior: Int) {
val map = mapReservas(reservas)
for(day in dayInferior..daySuperior) {
for((pair, list) in map) {
val reservasNum = pair.first
val reservasDay = pair.second
val reservasCount = list.count()
// ...
}
}
// ...
}
我故意不去碰这个函数(mapReservas
),因为您可能正在其他地方使用它。但是您可以通过使用(自Kotlin 1.1)立即改进它
typealias FlightNum=String
typealias Day=Int
趣味地图预订(预订:列表):
地图{
// ...
}
如您所见,如果使用destructure语法和类型别名,代码的可读性将大大提高。所有代码只能用一个函数替换
fun interval(reservas: List<Reservas>, dayInferior: Int, daySuperior: Int) {
reservas.groupBy { reserva -> reserva.day to reserva.numFlight }
.filter { (key, _) -> key.first in dayInferior..daySuperior }
.forEach { (key, reservas) ->
val (reservasNum, reservasDay) = key
val reservasCount = reservas.count()
println("$reservasNum has $reservasCount passengers on day $reservasDay")
}
println()
println("Press Enter")
readLine()
}
:
看看“谷歌”用户的答案。这将是在Kotlin(或带有流的Java)中实现的方法。有趣的mapReservas可以使用“groupBy”完成,所以为什么要自己编写呢。您的“for(day in daySuperior..daySuperior)”可以通过过滤器完成。绝对值得一看,值得选择答案。是的,我在选择答案时犯了一个错误,我想我是在选择那个答案,谢谢你提醒我@Mikezri不认为这是OP想要的,但当然这是Kotlin的方式。优雅的解决方案+1
typealias FlightNum = String
typealias Day = Int
fun mapReservas(reservas: List<Reservas>):
Map<Pair<FlightNum, Day>, List<Reservas>> {
// ...
}
fun interval(reservas: List<Reservas>, dayInferior: Int, daySuperior: Int) {
reservas.groupBy { reserva -> reserva.day to reserva.numFlight }
.filter { (key, _) -> key.first in dayInferior..daySuperior }
.forEach { (key, reservas) ->
val (reservasNum, reservasDay) = key
val reservasCount = reservas.count()
println("$reservasNum has $reservasCount passengers on day $reservasDay")
}
println()
println("Press Enter")
readLine()
}
val reservasNum = it.key.first
val reservasDay = it.key.second
same as
val (reservasNum, reservasDa) = it.key
.filter { (key, _) -> ... }