2016-12-18 2 views
0

Я создал словарь, как этотКак изменить значение элемента в словаре массивов?

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]]] 

Как я могу изменить значение 3 в "x1" в "xx" на другой номер? я не знаю, что это номер 3, но я знаю, что он находится в MyArray["xx"]!["x1"]![2]

ответ

0

Если вы знаете, индекс числа вы хотели бы изменить из трех, вы можете изменить номер 3 непосредственно с помощью индексов ["xx"]?["x1"]?[2].

var myArray = [ 
    "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] 
    ] 
] 

array["xx"]?["x1"]?[2] = 4 
1
// 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]]] 
+0

Это может быть полезно из некоторого описания. Кодовые ответы не одобряются. Объясните, зачем этот код нужен/должен использоваться. – rmaddy

+0

@rmaddy Я занимался редактированием его с описаниями комментариев кода (которые теперь включены, через 30 секунд после вашего комментария), но спасибо за (очень быстрое) напоминание :) – dfri

+0

@dfri Я пытаюсь заменить '3 'с переменной Int var 'Currentindex = 3', и она показывает мне следующую ошибку:' Невозможно вызвать' indexOf 'с помощью списка аргументов типа' (of: Int) '', но почему? – sunbile

Смежные вопросы