我有一个序列:
Seq(1,2,3)
我试图获得一个如下所示的序列序列:
Seq(Seq(1), Seq(1,2), Seq(1,2,3))
以下是我提出的建议:
def pop(acc: Seq[Seq[Int]], elems: Seq[Int]): Seq[Int] = elems match {
case Nil => acc.flatten
case x :: xs =>
pop(acc ++ Seq(Seq(x, xs.head)), xs.tail)
}
正如预期的那样,我在我做xs.head的地方遇到NoSuchElementException。我确定必须有一些我做错的事情!可能是我失踪了。这个没有给我预期的结果,但这只是一个尝试!
编辑:最初的目标是将一个字符串拆分为:
" 1.2.3"到序列的序列为Seq(" 1),Seq(" 1.2"),Seq(" 1.2.3")
为实现这一目标,我首先要根据分裂进行分割。字符,遍历生成的序列并再次与它们连接。字符。
答案 0 :(得分:7)
Seq(1,2,3).scanLeft(Seq[Int]())(_ :+ _).tail
如果列表较长,则追加到Seq
scanLeft
的末尾可能会变得过于昂贵。在这种情况下,您可以添加到List,并添加反向步骤,或使用一些可变构建器(如ListBuffer
)。
答案 1 :(得分:5)
您也可以使用inits
:
scala> Seq(1,2,3).inits.toList.reverse.tail
res0: List[Seq[Int]] = List(List(1), List(1, 2), List(1, 2, 3))
修改强>: 每个问题更新,类似于查找字符串的所有前缀到“。”的方法。分隔符只是将String视为一系列Chars:
"1.2.3".inits.filter(s => s.nonEmpty && !s.endsWith(".")).toList.reverse
答案 2 :(得分:3)
val input = Seq(1,2,3)
val result = (1 to input.length).map(input.take).toList // List(List(1), List(1, 2), List(1, 2, 3))
答案 3 :(得分:0)
几乎就在那里:
def pop(acc: Seq[Seq[Int]], elems: Seq[Int]): Seq[Seq[Int]] = elems match {
case Nil => acc
case x :: xs =>
if (acc.isEmpty)
pop(Seq(Seq(x)), xs)
else
pop(acc ++ Seq(acc.last ++ Seq(x)), xs)
}
答案 4 :(得分:0)
如果您的> db.test1.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "mydb.test1"
},
{
"v" : 1,
"unique" : true,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "name_text_lname_text",
"ns" : "mydb.test1",
"caseInsensitive" : true,
"weights" : {
"lname" : 1,
"name" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
}
]
>
没有重复且已订购,您可以执行以下操作:
Seq