// example setup
var myArray: [String:[String:[Int]]] = [
"xx": ["x1": [1, 2, 3], "x2": [4, 5, 6], "x3": [7, 8, 9]],
"yy": ["y1": [10, 11, 12], "y2": [13, 14, 15], "y3": [16, 17, 18]]]
// value to be replaced
let oldNum = 3
// value to replace old value by
let newNum = 4
// extract the current value (array) for inner key 'x1' (if it exists),
// and proceed if 'oldNum' is an element of this array
if var innerArr = myArray["xx"]?["x1"], let idx = innerArr.index(of: oldNum) {
// replace the 'oldNum' element with your new value in the copy of
// the inner array
innerArr[idx] = newNum
// replace the inner array with the new mutated array
myArray["xx"]?["x1"] = innerArr
}
print(myArray)
/* ["yy": ["y3": [16, 17, 18], "y2": [13, 14, 15], "y1": [10, 11, 12]],
"xx": ["x1": [1, 2, 4], "x3": [7, 8, 9], "x2": [4, 5, 6]]]
^ok! */
на основе следующего Q & A:
Более исполнительский подход был бы фактически удалением внутренний массив (для ключа "x1"
); мутируя его; и повторно добавить его в словарь
// check if 'oldNum' is a member of the inner array, and if it is: remove
// the array and mutate it's 'oldNum' member to a new value, prior to
// adding the array again to the dictionary
if let idx = myArray["xx"]?["x1"]?.index(of: oldNum),
var innerArr = myArray["xx"]?.removeValue(forKey: "x1") {
innerArr[idx] = newNum
myArray["xx"]?["x1"] = innerArr
}
print(myArray)
// ["yy": ["y3": [16, 17, 18], "y2": [13, 14, 15], "y1": [10, 11, 12]], "xx": ["x1": [1, 2, 4], "x3": [7, 8, 9], "x2": [4, 5, 6]]]
Это может быть полезно из некоторого описания. Кодовые ответы не одобряются. Объясните, зачем этот код нужен/должен использоваться. – rmaddy
@rmaddy Я занимался редактированием его с описаниями комментариев кода (которые теперь включены, через 30 секунд после вашего комментария), но спасибо за (очень быстрое) напоминание :) – dfri
@dfri Я пытаюсь заменить '3 'с переменной Int var 'Currentindex = 3', и она показывает мне следующую ошибку:' Невозможно вызвать' indexOf 'с помощью списка аргументов типа' (of: Int) '', но почему? – sunbile