我有一个这样的序列:
$variable ="candy_name=M&M";
$variable = str_replace("&", "%26", $variable);
我要转换为val l = Seq(1,2,3,4)
以下是我的尝试:
List(Seq(1,2), Seq(2,3), Seq(3,4))
这奇怪似乎不起作用?有什么建议吗?
答案 0 :(得分:7)
您也可以使用sliding
:
l.sliding(2).toList
res1: List[Seq[Int]] = List(List(1, 2), List(2, 3), List(3, 4))
答案 1 :(得分:3)
好的,我了解了zip方法:
if
答案 2 :(得分:1)
已经给出的答案描述得很好,如何以scala方式执行此操作。 但是,您可能还需要解释为什么您的代码不起作用,所以它来了:
您的getPairs
函数需要一个元组列表作为输入并返回一个元组列表。但是你说你想将单个值列表转换为元组列表。因此,如果您致电getPairs(l)
,您将收到type mismatch
编译错误。
您必须重构代码才能获得一个简单的列表:
def pairs(in: Seq[Int]): Seq[(Int, Int)] = {
@tailrec
def recursive(remaining: Seq[Int], result: Seq[(Int, Int)]): Seq[(Int, Int)] = {
remaining match {
case Nil => result
case last +: Nil => result
case head +: next +: tail => recursive(next +: tail, (head, next) +: result)
}
}
recursive(in, Nil).reverse
}
从这里开始,这是通用功能的一小步:
def pairs2[A](in: Seq[A]): Seq[(A, A)] = {
@tailrec
def recursive(remaining: Seq[A], result: Seq[(A, A)]): Seq[(A, A)] = {
remaining match {
case Nil => result
case last +: Nil => result
case head +: next +: tail => recursive(next +: tail, (head, next) +: result)
}
}
recursive(in, Nil).reverse
}
答案 3 :(得分:0)
使用for comprehension,例如如下,
for ( (a,b) <- l zip l.drop(1) ) yield Seq(a,b)
注意l.drop(1)
(与l.tail
相反)如果l
为空或最多只有一个项目,则会提供一个空列表。