Подтвердить что ты не робот

Выбор последнего элемента списка

scala> last(List(1, 1, 2, 3, 5, 8))
res0: Int = 8

для получения результата выше, я написал этот код:

val yum = args(0).toInt
val thrill: 

def last(a: List[Int]): List[Int] = {
     println(last(List(args(0).toInt).last)
     }

В чем проблема с этим кодом?

4b9b3361

Ответ 1

Вы можете использовать last, который возвращает последний элемент или выбрасывает NoSuchElementException, если список пуст.

scala> List(1, 2, 3).last
res0: Int = 3

Если вы не знаете, пуст или нет список, вы можете использовать lastOption, который возвращает Option.

scala> List().lastOption
res1: Option[Nothing] = None

scala> List(1, 2, 3).lastOption
res2: Option[Int] = Some(3)

Ваш вопрос о List, но использование last в бесконечной коллекции (например, Stream.from(0)) может быть опасным и может привести к бесконечному циклу.

Ответ 2

Другая версия без использования last (по какой-либо причине вам может понадобиться).

def last(L:List[Int]) = L(L.size-1)

Ответ 3

Вам лучше делать:

 val a = List(1,2,3) //your list
 val last = a.reverse.head

Более чистый и менее подверженный ошибкам:)

Ответ 4

Последняя рекурсивная функция должна содержать 2 свойства. Ваша последняя функция не имеет ни одного из них.

  • Требование №1. Условие выхода, которое не вызывает рекурсивный далее.

  • Требование №2. Рекурсивный вызов, который уменьшает элементы, с которых мы начали.

Вот проблемы, которые я вижу с другими решениями.

  • Использование встроенной функции в последнем случае может не быть вариантом в интервью вопросы.
  • Реверсирование и голова требуют дополнительных операций, которые может потребовать интервьюер.
  • Что делать, если это настраиваемый связанный список без члена размера?

Я изменю его, как показано ниже.

def last(a: List[Int]): Int = a match {
  //The below condition defines an end condition where further recursive calls will not be made. requirement #1
  case x::Nil => x
  //The below condition reduces the data - requirement#2 for a recursive function.
  case x:: xs => last(xs)
}

last(List(1,2,3))

Результат

res0: Int = 3

Ответ 6

В этом заключается красота Scala!

val l: List[Int] = List(1,2,3,4)
val lastOption: Option[Int] = l.lastOption

Сделав это, вы получите Option of Int. Подробнее о Scala Option здесь.

Затем, наконец, вы можете обработать случай None, как вам угодно:

val last: Int = lastOption.getOrElse(0) //or however else you want to handle the case of an empty list