Подтвердить что ты не робот

Как удалить значение ключа из карты в scala

Map(data -> "sumi", rel -> 2, privacy -> 0, status -> 1,name->"govind singh")

как удалить данные с этой карты, если конфиденциальность равна 0.

Map(rel -> 2, privacy -> 0, status -> 1,name->"govind singh")  
4b9b3361

Ответ 1

Если вы используете неизменяемые карты, вы можете использовать метод - для создания новой карты без заданного ключа:

val mx = Map("data" -> "sumi", "rel" -> 2, "privacy" -> 0)

val m = mx("privacy") match {
    case 0 => mx - "data"
    case _ => mx
}

=> m: scala.collection.immutable.Map[String,Any] = Map(rel -> 2, privacy -> 0)

Если вы используете измененные карты, вы можете просто удалить ключ с помощью -= или remove.

Ответ 2

Если вы хотите увеличить масштаб и удалить несколько участников, то filterKeys - ваш лучший выбор:

val a = Map(
  "data"    -> "sumi",
  "rel"     -> "2",
  "privacy" -> "0",
  "status"  -> "1",
  "name"    -> "govind singh"
)

val b = a.filterKeys(_ != "data")

Ответ 3

Это зависит от типа используемой вами карты Scala.collection. Scala поставляется с картами mutable и immutable. Проверяет эти ссылки:

http://www.scala-lang.org/api/2.10.2/index.html#scala.collection.immutable.Map

и

http://www.scala-lang.org/api/2.10.2/index.html#scala.collection.mutable.Map

В обоих типах карт - обычно является операцией по удалению ключа. Детали зависят от типа карты. Карта mutable может быть изменена с помощью -=. Что-то вроде

if (m.contains("privacy") && m.getOrElse("privacy", 1) == 0) {
    m -= "play"
}

С другой стороны, неизменяемое отображение не может быть изменено на месте и должно вернуть новую карту после удаления элемента.

if (m.contains("privacy") && m.getOrElse("privacy", 1) == 0) {
    val newM = m - "play"
}

Обратите внимание, что вы создаете новую неизменяемую карту.