此代码编译错误
val kk2: List[(Int, Double)] = (1, 0.5) :: (2, 0.6)
kk2.map((n1, d1) => n1) // compile error
我想要List [Int,Double] =>列表[INT] 我该如何解决这个错误?
答案 0 :(得分:2)
两件事。
首先,要使用cons运算符List[(Int, Double)]
构造::
,您需要将此类列表的元素(例如,在您的情况下为(1, 0.5)
)附加到已存在的 列表,而不是其他元素。换句话说,在::
的右侧必须有一个元组列表,而不仅仅是一个元组,所以将(2, 0.6)
元组包装在List
中。注意:List(2, 0.6)
会给你一个包含两个元素的列表,2和0.6,但是你需要一个元组元素的列表,所以你需要两对括号:List((2, 0.6))
。正如在注释中正确指出的那样,您也可以以更清晰的方式执行(1, 0.5) :: (2, 0.6) :: Nil
,这是一种通过仅使用cons运算符定义列表的递归方式(Nil是一个空列表)。
其次,当你映射一个元组时,你必须使用部分函数来启动模式匹配机制,或者简单地说,你需要case
。
所以:
val kk2: List[(Int, Double)] = (1, 0.5) :: (2, 0.6) :: Nil
kk2.map { case (n1, d1) => n1 } // List(1,2)