我想访问内部List的第二个元素

时间:2017-05-03 06:10:41

标签: scala

我尝试了各种解决方案,但未能找到正确的解决方案

predict_proba()

输出应该是 - > 2

2 个答案:

答案 0 :(得分:1)

正确的解决方案是避免在List中混合类型。如果您有Any类型,那么您就在角落里。编译器不知道元素的类型,因此它不会让你对它们做任何有意义的事情。

发布问题的唯一方法是将元素转换为所需的类型,这是非常糟糕的Scala风格。这也很危险。如果你投不正确,程序就会爆炸。

scala> list.last.asInstanceOf[List[Int]](1)
res0: Int = 2

如果你必须告诉编译器元素类型是什么,那么你就不会充分利用编译器和/或语言。

答案 1 :(得分:0)

我可以想到几种方法,但是,如上所述,更准确的打字会更好。

list match {
  case _ :: _ :: (_ :: elem :: Nil) :: Nil => Some(elem)
  case _ => None
}

当然,这种模式是根据您的确切用例“列表”量身定制的,并且在很多情况下无法找到您的号码。比如在'list'中找到第一个List元素并获取它的第二个元素

list.collectFirst {
  case _ :: elem :: _ => elem
}

但同样,这可能无法满足您的所有需求。要在“列表”中找到第n个List元素的第m个元素,您可以

list.collect {
  case l: List[_] => l // compiler warning maybe?
}.lift(n).flatMap(_.lift(m))