Scala中如何用模式匹配匹配Seq中间元素并修改序列
Scala序列模式匹配:匹配任意前缀并修改中间元素
你原来的写法里,first_part +: "C" +: tail会把first_part识别为单个元素(而非序列),这是因为+:运算符是用来拆分序列的头部单个元素和剩余尾部序列的。要匹配任意长度的前缀序列,需要用Scala的序列通配模式_*结合变量绑定:
val inputSeq = Seq("A","B","C","D","E") val modified = inputSeq match { // 匹配包含"C"的序列,将前后部分绑定为序列变量 case Seq(prefix @ _*, "C", suffix @ _*) => prefix ++ Seq("C", "D") ++ suffix // 匹配不到目标元素时的默认处理,这里返回原序列 case _ => inputSeq }
关键语法说明:
prefix @ _*:匹配"C"之前的所有元素,把它们整体绑定为prefix序列"C":精准定位你要识别的中间元素suffix @ _*:匹配"C"之后的所有元素,把它们整体绑定为suffix序列- 最后通过
++拼接新序列,完成插入"D"的需求
如果需要兼容更早的Scala版本,也可以用递归模式匹配实现,但上述方式是最简洁易懂的方案。
内容的提问来源于stack exchange,提问作者Hima_93
相关产品推荐
相关产品推荐

