takeWhile в Scala для элемента n + 1 - PullRequest
0 голосов
/ 16 февраля 2020
  • Определите функцию dropWhileSmallerThanFive, она должна взять список и отбросить первые n элементов, пока следующий элемент (n + 1) не станет больше или равен 5.

    * Использование одна из Scala встроенных функций списка (например, takeWhile).

Я пробовал это:

   def dropWhileSmallerThanFive(xs: List[Int]): List[Int] = xs match {
        case Nil => Nil
        case head :: b :: tail if b >= 5 => head :: (b::tail).takeWhile(_>=5)
        case _ => Nil 
    }

Но это совершенно неправильно, что я должен делать?

1 Ответ

1 голос
/ 16 февраля 2020

Добро пожаловать на ТАК! Если вы новичок в Scala, рассмотрите следующие удобные для начинающих ресурсы


Scala предоставляет List.dropWhile из коробки или рассмотрим следующую рекурсивную реализацию

def recDropWhile(l: List[Int], predicate: Int => Boolean): List[Int] = {
  @scala.annotation.tailrec
  def loop(l: List[Int], predicate: Int => Boolean): List[Int] = {
    l match {
      case Nil => Nil
      case head :: tail => if (predicate(head)) loop(tail, predicate) else (head :: tail)
    }
  }
  loop(l, predicate)
}

Оба вывода

val l = List(1,2,3,4,5,6,7,8)
l.dropWhile(_ < 5)       // res3: List[Int] = List(5, 6, 7, 8)
recDropWhile(l, _ < 5)   // res4: List[Int] = List(5, 6, 7, 8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...