Вы можете использовать foldLeft для объединения двух карт одного типа
def merge[A, B](a: Map[A, B], b: Map[A, B])(mergef: (B, Option[B]) => B): Map[A, B] = {
val (big, small) = if (a.size > b.size) (a, b) else (b, a)
small.foldLeft(big) { case (z, (k, v)) => z + (k -> mergef(v, z.get(k))) }
}
def mergeIntSum[A](a: Map[A, Int], b: Map[A, Int]): Map[A, Int] =
merge(a, b)((v1, v2) => v2.map(_ + v1).getOrElse(v1))
Пример:
val a = Map("a" -> 1, "b" -> 5, "c" -> 6)
val b = Map("a" -> 4, "z" -> 8)
mergeIntSum(a, b)
res0: Map[String,Int] = Map(a -> 5, b -> 5, c -> 6, z -> 8)
Вам нужно экранировать его двумя обратными косыми чертами
\\?
Подробнее см. Здесь:
Вы должны использовать двойной слеш:
var regex = new RegExp("\\?", "g");
Почему? потому что в JavaScript \
также используется для экранирования символов в строках, поэтому: "\?" становится: "?"
И "\\?"
, становится "\?"
Вы можете ограничить свое регулярное выражение косой чертой вместо кавычек, а затем одной обратной косой чертой, чтобы избежать знака вопроса. Попробуйте следующее:
var gent = /I like your Apartment. Could we schedule a viewing\?/g;