Scala:安全访问列表[DataFrame]中的索引
我收到一个Scala:安全访问列表[DataFrame]中的索引,scala,list,dataframe,indexing,Scala,List,Dataframe,Indexing,我收到一个列表[DataFrame],我想将每个df存储在一个变量中。列表中始终存在某些值: val routes = dataframes(0) val stops = dataframes(1) 但是其他的也可能会出现,所以大小列表是可变的。 如何安全地访问可能超出范围的列表索引?我认为使用Some()并处理结果可以: val fare_attributes : Option[DataFrame] = Some(dataframes(10)) fare_attributes match
列表[DataFrame]
,我想将每个df存储在一个变量中。列表中始终存在某些值:
val routes = dataframes(0)
val stops = dataframes(1)
但是其他的也可能会出现,所以大小列表是可变的。
如何安全地访问可能超出范围的列表索引?我认为使用Some()
并处理结果可以:
val fare_attributes : Option[DataFrame] = Some(dataframes(10))
fare_attributes match {
case Some(fare) => upload())
println("fare_attributes uploaded")
case None => println("No fare_attributes found")
}
但我收到:
java.lang.IndexOutOfBoundsException:2
您可以在列表中使用.lift
:
val fare_attributes : Option[DataFrame] = dataframes.lift(10)
我认为在访问索引值之前,您必须检查列表的长度。您可能需要实现一些包装器函数来实现这一点。这样就不会重复进行 您可以通过使用两个参数列表来对其进行咖喱处理,这有点“优雅”。因此,您的代码有点简洁。这是一个你可以改进的样品
def safeList(list: List[Int])(index: Int): Int = {
if (index < list.length) list(index)
else 0
}
val x = List(1, 2 ,3 )
val y = safeList(x)(_)
val a = y(0) // returns 1
val b = y(1) // returns 2
val c = y(4) // returns 0
def安全列表(列表:列表[Int])(索引:Int):Int={
如果(索引<列表长度)列表(索引)
其他0
}
val x=列表(1、2、3)
val y=安全列表(x)(ux)
val a=y(0)//返回1
val b=y(1)//返回2
val c=y(4)//返回0
作为对其工作原理的补充说明,lift
是PartialFunction[a,B]
上的一种方法,它返回一个a=>选项[B]
,List[a]
扩展自PartialFunction[Int,a]
(因此它有lift
方法)。所以您实际上是在调用dataframes.lift.apply(10)
。