当需要匹配 scala 中 Seq() 的中间元素时如何应用模式匹配

问题描述 投票:0回答:1

这是一个学习问题而不是编程代码,我有一个序列如下,

val inputSeq = Seq("A","B","C","D","E")

所以我想使用模式匹配从序列中识别内部元素(在本例中为“C”),并应用模式匹配(如以下示例中所示)来添加元素,

val modified = inputSeq match {

case first_part +: "C" +: tail => first_part +: "C" +: "D" +: tail
case _ => ???
}

我知道还有其他方法可以使用而无需模式匹配。但是,我想知道如何使用模式匹配来实现这一点。但是,我无法将

first_part
匹配为序列,有人可以帮助我找到一种方法将 first_part 匹配为序列吗?

list scala pattern-matching
1个回答
0
投票

这是一种通过递归模式匹配来实现的方法:

val inputSeq = Seq("A","B","C","D","E")

def modifyList(seq: Seq[String], s: String, t: String): List[String] = {
  @scala.annotation.tailrec
  def loop(ls: List[String], res: List[String]): List[String] = ls match {
    case Nil => res.reverse
    case `s` :: tail => loop(tail, t :: s :: res)
    case h :: tail => loop(tail, h :: res)
  }
  loop(seq.toList, Nil)
}

modifyList(Seq("A","B","C","D","E"), "C", "D")
// List(A, B, C, D, D, E)

modifyList(Seq("A","B","C","D","E","C","F"), "C", "X")
// List(A, B, C, D, X, E, C, X, F)

请注意,上面的示例代码只是附加到与提供的字符串

s
匹配的字符串的每次出现(即
t
)。

© www.soinside.com 2019 - 2024. All rights reserved.