值声明中的 Scala 列表模式匹配
Scala list pattern matching in value declaration
假设以下四个元组列表:
> def getList = List( (1,2), (3,4), (5,6), (7,8) )
我想像这样在新值声明中将它解析为三个部分 - 最后一个元组 (l1,l2)
, 倒数第二个元组 (p1,p2)
和 列表的其余部分 rest
。
此外,我还想对元组进行模式匹配。示例:
> val (rest :: (p1, p2) :: (l1, l2) ) = getList
rest = List( (1,2), (3,4) )
p1 = 5
p2 = 6
l1 = 7
l2 = 8
预期的输出不起作用,因为 ::
需要一个列表作为其右侧参数。我尝试了几种不同的可能性,例如 :::
和 List
包装器。然而,我并没有达到目的。
这可能吗?我不想反转列表 - 相反,我正在寻找适用于值声明的优雅解决方案(因此请不要 match
)。我希望在线解决方案。
编辑:Scala 代码运行器版本 2.9.2
您可以使用 :+
匹配器对象:
val rest :+ ((p1, p2)) :+ ((l1, l2)) = getList
从 scala 2.10 开始是 the part of standard library
对于以前的版本,您可以使用 source
自己重新定义它
假设以下四个元组列表:
> def getList = List( (1,2), (3,4), (5,6), (7,8) )
我想像这样在新值声明中将它解析为三个部分 - 最后一个元组 (l1,l2)
, 倒数第二个元组 (p1,p2)
和 列表的其余部分 rest
。
此外,我还想对元组进行模式匹配。示例:
> val (rest :: (p1, p2) :: (l1, l2) ) = getList
rest = List( (1,2), (3,4) )
p1 = 5
p2 = 6
l1 = 7
l2 = 8
预期的输出不起作用,因为 ::
需要一个列表作为其右侧参数。我尝试了几种不同的可能性,例如 :::
和 List
包装器。然而,我并没有达到目的。
这可能吗?我不想反转列表 - 相反,我正在寻找适用于值声明的优雅解决方案(因此请不要 match
)。我希望在线解决方案。
编辑:Scala 代码运行器版本 2.9.2
您可以使用 :+
匹配器对象:
val rest :+ ((p1, p2)) :+ ((l1, l2)) = getList
从 scala 2.10 开始是 the part of standard library
对于以前的版本,您可以使用 source
自己重新定义它