Scala - объединить списки в один список поэлементно - PullRequest
1 голос
/ 25 февраля 2020

Я пытаюсь объединить записи, хранящиеся как List, в один List, где только один столбец с неуникальными значениями равен List, остальные List - это отдельные элементы.

Ниже приведен пример того, что я имею в виду:

val list1 = List(1, 2, "abcd", 5)
val list2 = List(1, 2, "efgh", 5)

Что мне нужно после слияния, примерно так:

List(1, 2, List("abcd", "efgh"), 5)

Я очень новичок на Scala, поэтому я буду признателен за вашу помощь.

Ответы [ 2 ]

4 голосов
/ 25 февраля 2020
for ((x,y) <- list1.zip(list2)) yield if (x == y) x else List(x,y)
  • zip объединяет два списка и дает вам список пар
  • понимание for проходит через эти пары. Если оба они равны, то получается только первый элемент, в противном случае список, содержащий оба элемента.

Ваш код может стать проще, если вам удастся сохранить ваши списки однородными, то есть все элементы одного типа.

3 голосов
/ 25 февраля 2020

Все списки имеют одинаковую длину, и всегда третий элемент является расходящимся.

Тогда используйте кортеж, это будет лучше моделировать ваши данные, это сохранит тип информация и было бы проще сделать комбинацию.

def merge[A, B, C, D](t1: (A, B, C, D), t2: (A, B, C, D)): Option[(A, B, (C, C), D)] =
  t1 match {
    case (a, b, c1, d) =>
      t2 match {
        case (`a`, `b`, c2, `d`) => Some((a, b, (c1, c2), d))
        case _ => None // The other elements not where equal.
      }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...