预先列出并附加到列表中

时间:2015-06-23 09:05:30

标签: scala

使用scala,我尝试将多个元素连接到一个列表,如下所示

val min = func1()
val max = func1()
val interpol : List[Float] = func2()

val res : List[Float] = (min.toFloat) :: interpolated :: (max.toFloat) :: Nil

由于类型不匹配错误,此语法不起作用。我怎样才能将元素预先添加到列表中(以非常优雅的方式,即不使用列表缓冲区等)?

是的,我也试过

val res : List[Float] = (min.toFloat) :: interpolated :: List(max.toFloat)

但是出现了类型不匹配错误(List[Any] vs List[Float]

2 个答案:

答案 0 :(得分:3)

Peter Neyens解决方案运行良好。 就个人而言,我更喜欢这个

min.toFloat +: interpolated :+ max.toFloat

+::+在Seq中定义,因此不仅适用于List,也适用于Vector

答案 1 :(得分:2)

您正在将;WITH mycte AS (SELECT Z.zipid, B.bldgid, (( Sqrt(Square((Z.lat - B.lat)*68.96799738887665) + Square((Z.long - B.long)*54.69366983621222)) )) Dist, Row_number() OVER ( partition BY zipid ORDER BY ((Sqrt( Square((Z.lat - B.lat)*68.96799738887665) + Square(( Z.long - B.long)*54.69366983621222))))) DistOrder FROM Buildings_Coordinates B CROSS JOIN Zip_Code_Coordinates Z) UPDATE z SET closest_buildingid = bldgid, closest_bldgdistance = dist FROM Zip_Code_Coordinates Z INNER JOIN mycte C ON Z.zipid = C.zipid WHERE distorder = 1 添加到min.toFloat列表中,但是您无法将结果列表添加到列表中,并且已创建的最大值(interpolated),您将需要max.toFloat :: Nil连接这两个列表。

:::