Как получить новый список с сопоставленными ключами, если существует еще внешний ключ? - PullRequest
0 голосов
/ 07 марта 2020

вход:

type DeviceType = Any
val rh: Map[(String, String), String] = Map(("ss", "ex-ss") -> "MobileType", ("ud", "ex-ud") -> "DesktopType")
val lh: Map[String, DeviceType] = Map("ex-ss" -> 1, "ex-ud" -> "A@F4CC", "ex-zip" -> 30052)

Ожидаемый результат: val res: Map [String, DeviceType] = Map ("ss" -> 1, "ud" -> "A@F4CC "," ex-zip "-> 30052)

Ответы [ 2 ]

2 голосов
/ 07 марта 2020

Итак, в основном вам нужно будет создать еще одну карту для хранения связи между кортежами из карты rh.

Пожалуйста, смотрите код ниже для более подробной информации:

// Create device synonyms index, for instance: "ex-ss" -> "ss"
val deviceSynonyms: Map[String, String] = rh.keys.map(_.swap).toMap
val res: Map[String, DeviceType] = lh.map {
    case (deviceName, deviceType) => deviceSynonyms.getOrElse(deviceName, deviceName) -> deviceType
}

, который даст желаемый результат:

Map(ss -> 1, ud -> A@F4CC, ex-zip -> 30052)
1 голос
/ 07 марта 2020

Решение:

type DeviceType = Any
val rh: Map[(String, String), String] = Map(("ss", "ex-ss") -> "MobileType", ("ud", "ex-ud") -> "DesktopType")
val lh: Map[String, DeviceType] = Map("ex-ss" -> 1, "ex-ud" -> "A@F4CC", "ex-zip" -> 30052)
val rhKeySet = rh.keySet

val res: Map[String, DeviceType] = lh.map {
    case (k,v) =>
      if (rh.exists(_._1._2 == k)) {
        val res = rhKeySet.filter(_._2 == k).head
        res._1 -> v
      }else{
        k -> v
      }
  }

Вывод:

Map(ss -> 1, ud -> A@F4CC, ex-zip -> 30052)

Дайте мне знать, если это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...