#scala
#scala
Вопрос:
Я должен печатать элементы списка с конца с запятыми между ними и без запятой в конце. Код:
val daysList = List("Poniedzialek", "Wtorek", "Sroda", "Czwartek", "Piatek", "Sobota", "Niedziela")
def recurencyListReverse(days:List[String], twoB:String):String =
{
if (days.nonEmpty) return recurencyListReverse(days.tail, days.head ", " twoB)
return twoB
}
println("Zadanie 2B)")
println(recurencyListReverse(daysList, ""))
Есть идеи?
Комментарии:
1. Вы можете просто сделать
daysList.reverse.mkString(", ")
2. Извините, я не упомянул, что это должно быть сделано с помощью функции возврата
3. @sinanspd еще лучше
daysList.reverseIterator.mkString(", ")
4. @mnrater хвостовая рекурсия и сопоставление с образцом, это должно быть довольно перспективно, и, пожалуйста, не используйте
return
.
Ответ №1:
Базовая рекурсия.
def recurencyListReverse(days:List[String]):String = days match {
case day :: Nil => day
case day :: tail => recurencyListReverse(tail) s", $day"
case _ => ""
}
Если вы хотите, чтобы он был рекурсивным.
def recurencyListReverse(days:List[String]):String = {
@annotation.tailrec
def loop(ds: List[String], connect:String, acc:String):String =
if (ds.isEmpty) acc
else loop(ds.tail, ", ", ds.head connect acc)
loop(days, "", "")
}
Ответ №2:
Если вам это нужно только для «печати» mkString()
, должно быть достаточно.
scala> daysList.mkString(", ")
res1: String = Poniedzialek, Wtorek, Sroda, Czwartek, Piatek, Sobota, Niedziela
scala> daysList.reverse.mkString(", ")
res2: String = Niedziela, Sobota, Piatek, Czwartek, Sroda, Wtorek, Poniedzialek
Комментарии:
1. Я не думаю, что в моей командной строке есть польские диакритические знаки, но они доступны в Scastie: scastie.scala-lang.org/W9kqMgzYQfOBmTjRkPJakw