选择列表的最后一个元素

don*_*dog 31 scala list

scala> last(List(1, 1, 2, 3, 5, 8))
res0: Int = 8
Run Code Online (Sandbox Code Playgroud)

为了得到上面的结果,我写了这段代码:

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

def last(a: List[Int]): List[Int] = {
     println(last(List(args(0).toInt).last)
     }
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题?

mic*_*ebe 82

如果列表为空,您可以使用last,返回最后一个元素或抛出a NoSuchElementException.

scala> List(1, 2, 3).last
res0: Int = 3
Run Code Online (Sandbox Code Playgroud)

如果您不知道列表是否为空,您可以考虑使用lastOption,返回一个Option.

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

scala> List(1, 2, 3).lastOption
res2: Option[Int] = Some(3)
Run Code Online (Sandbox Code Playgroud)

你的问题是关于List,但last在无限集合(例如Stream.from(0))上使用可能是危险的,并可能导致无限循环.


Jus*_*s12 10

没有使用的另一个版本last(无论出于什么原因你可能需要它).

def last(L:List[Int]) = L(L.size-1)
Run Code Online (Sandbox Code Playgroud)

  • 这可以调整以获得倒数第二个项目,这非常有帮助! (2认同)

Per*_*ega 7

你应该做得更好:

 val a = List(1,2,3) //your list
 val last = a.reverse.head
Run Code Online (Sandbox Code Playgroud)

更清洁,更不容易出错:)

  • 据我记得Scala 2.8书的形式,列表是一个链表,所以头部很容易访问,但最后一个元素有线性成本.我现在在书中看到一个推荐reverse.head的例子. (4认同)
  • .reverse.head 相对于 .last 有优势吗? (2认同)