Swift Dictionary с массивом строк удалить значение

66
10

Итак, у меня есть словарь, содержащий массив строк:

var dict = ["Section1": ["dev1", "dev2"], "Section2": ["dev3", "dev4"]]

И теперь я должен уметь удалить значение из массива. Пример: я хочу удалить "dev4" независимо от того, находится ли он в разделе "Раздел 1" или "Раздел 2".

Как я буду это делать?

спросил(а) 2021-01-19T14:53:28+03:00 9 месяцев назад
1
Решение
91

С Swift4 существует возможность применить карту к значениям словаря:

var dict = ["Section1": ["dev1", "dev2"], "Section2": ["dev3", "dev4"]]
dict = dict.mapValues{ $0.filter{ $0 != "dev4" } }

который дает результат:

dict // -> ["Section1": ["dev1", "dev2"], "Section2": ["dev3"]]

ответил(а) 2021-01-19T14:53:28+03:00 9 месяцев назад
65

for key in dict.keys {
dict[key] = dict[key]!.filter({ $0 != "dev4"})
}

ответил(а) 2021-01-19T14:53:28+03:00 9 месяцев назад
47

Мини-версия:

dict.forEach({ (k, v) in dict[k] = v.filter({ $0 != "dev4" }) })
print(dict) // ["Section1": ["dev1", "dev2"], "Section2": ["dev3"]]

ответил(а) 2021-01-19T14:53:28+03:00 9 месяцев назад
47

Некоторые примеры кода:

func removeValue(value: String, fromDict dict: [String: [String]]) -> [String: [String]] {
var out = [String: [String]]()
for entry in dict {
out[entry.key] = entry.value.filter({
$0 != value
})
}
return out
}

var dict = ["Section1": ["dev1", "dev2"], "Section2": ["dev3", "dev4"]]
let new = removeValue(value: "dev4", fromDict: dict)

ответил(а) 2021-01-19T14:53:28+03:00 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема