如何从排序列表中选择第二个最小元素?

Don*_*beo 1 scala

如何在列表排序后选择第二个最小元素?

使用此代码我收到错误,我不明白为什么.

object find_the_median {
  val L = List(2,4,1,2,5,6,7,2)

  L(2)
  L.sorted(2) // FIXME returns an error
}
Run Code Online (Sandbox Code Playgroud)

mig*_*uel 7

这是因为sorted隐式接收一个Ordering参数,当你这样做时,类似于L.sorted(2)typechecker认为你想要传递2一个参数Ordering.因此,在一行中执行此操作的一种方法是:

L.sorted.apply(2)
Run Code Online (Sandbox Code Playgroud)

或者为了避免apply明确地传递顺序:

L.sorted(implicitly[Ordering[Int]])(2)
Run Code Online (Sandbox Code Playgroud)

我承认有点困惑,所以我认为最好的是两行:

val sorted = L.sorted
sorted(2)
Run Code Online (Sandbox Code Playgroud)

(您可能还希望遵循使用小写命名变量的Scala约定).