gpt4 book ai didi

scala - 有条件地合并列表元素

转载 作者:行者123 更新时间:2023-12-04 04:53:38 26 4
gpt4 key购买 nike

我想根据一些表达式有条件地合并列表中彼此后面的元素。
一个更好地解释我想做的事情的例子:

来自:
val list = List("a1", "a2", "b1", "b2", "b3", "a3", "a4")
我想将所有以 b 开头的元素合并为一个元素,以获得这样的结果列表:

List("a1", "a2", "b1-b2-b3", "a3", "a4")

在我的用例中,b 元素总是按顺序排列,但 b 元素的数量可以从没有元素到数十个元素不等。

我试过做类似的事情
list.foldLeft("")((s1, s2) => if (s1.matches("""b\d""") && s2.matches("""b\d""")) s1 + "-" + s2 else s1)

但它不会使我有任何用处。

关于如何解决这个问题的任何建议?

最佳答案

可以通过 foldLeft 来完成并查看列表中最近插入的元素:

list.foldLeft(List[String]()) {
case (Nil, str) => str :: Nil
case (head :: tail, str) =>
if (head(0) == 'b' && str(0) == 'b') (s"$head-$str") :: tail
else str :: head :: tail
}.reverse
//> res0: List[String] = List(a1, a2, b1-b2-b3, a3, a4)

模式匹配也可以重写(如果你觉得更清楚):
list.foldLeft(List[String]()) {
case (head :: tail, str) if (head(0) == 'b' && str(0) == 'b') =>
(s"$head-$str") :: tail
case (other, str) =>
str :: other
}.reverse

关于scala - 有条件地合并列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17066465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com