Список в scala не обновляется

Я новичок в Scala Collections, и в настоящее время я хочу разделить данный список строк в кортеж из двух списков (List[String], List[String]), который содержит список строк палиндрома и остальную часть входных строк.

Например, если ввод List("racecar", "abcd", "lilil", "effg")вывод должен быть (List("racecar", "lilil"), List("abcd", "effg"))

У меня есть решение с использованием фильтра. Но, в настоящее время, пытаюсь уточнить мое решение, используя foldLeft. Мой новый подход заключается в следующем:

def stringTuples2(strings: List[String]): (List[String], List[String]) = {
strings.foldLeft((List[String](), List[String]()))((b, a) => {
  if (a.equals(a.reverse)) { b._1 :+ a; b }
  else { b._2 :+ a; b }
})}

Я не уверен, что я делаю неправильно, но вывод для этого решения - Tuple из двух пустых списков, т.е. (List(), List()).

Помощь приветствуется. Спасибо!

1 ответ

Решение

Ваша попытка изменить b создает новый Listпотом брось новый List прочь и вернуться b, что без изменений. Вынуть ;b часть и вернуть обновленный кортеж: (b._1 :+ a, b._2) или же (b._1, b._2 :+ a)

Кстати, вот другой подход к решению.

List("racecar", "abcd", "lilil", "effg").partition(s => s == s.reverse)
Другие вопросы по тегам