Удаление элементов из карты типа (Int, ListBuffer(Int))

Я имею LinkedHashMaps типа:

val map1 = LinkedHashMap(1 -> 1, 2 -> (1,2), 3 -> (1,2,3)) val map2 = LinkedHashMap(2 -> 2, 3 -> (2,3), 5 -> (2,3,5))

где целые числа - это идентификаторы узлов графа, а список - это путь к этому узлу. Я хочу реализовать случай удаления узла. Предположим, что я хочу удалить узел 3, мне нужно сделать два действия: удалить элемент с ключом = 3 на каждой карте, удалить элементы, у которых в списке 3. Как это сделать в скале?

1 ответ

Решение

Если вы определите свою карту, как у вас,

val map1 = LinkedHashMap(1 -> 1, 2 -> (1,2), 3 -> (1,2,3))

У тебя нет key: Int а также value: List[Int] но у тебя есть key: Int а также values: Any,

scala> val map1 = LinkedHashMap(1 -> 1, 2 -> (1,2), 3 -> (1,2,3))
// map1: scala.collection.mutable.LinkedHashMap[Int,Any] = Map(1 -> 1, 2 -> (1,2), 3 -> (1,2,3))

Чтобы соответствовать вашим требованиям, вы должны определить свою карту следующим образом:

scala> val map1 = LinkedHashMap(1 -> List(1), 2 -> List(1,2), 3 -> List(1,2,3))
// map1: scala.collection.mutable.LinkedHashMap[Int,List[Int]] = Map(1 -> List(1), 2 -> List(1, 2), 3 -> List(1, 2, 3))

Теперь, если вы хотите удалить узел 3,

scala> val map2 = map1.filter({
     |   case (key, list) => key != 3 && !list.contains(3)
     | })
// map2: scala.collection.mutable.LinkedHashMap[Int,List[Int]] = Map(1 -> List(1), 2 -> List(1, 2))
Другие вопросы по тегам