У меня есть исходный массив значений фильтра, например:Swift метода фильтра с словарями
let filterValues : [String] = ["1", "4"]
попытка фильтровать массив словарей, где каждый словарь содержит массив 1 словаря или более.
Форма массива состоит в следующем:
let test : [[String : AnyObject]] = [
["Objects":
[
[
"value":"1",
"test":"test"
],
[
"value":"1",
"test":"test"
],
[
"value":"1",
"test":"test"
],
[
"value":"4",
"test":"test"
],
[
"value":"2",
"test":"test"
],
[
"value":"2",
"test":"test"
]
]
],
["Objects":
[
[
"value":"4",
"test":"test"
],
[
"value":"2",
"test":"test"
],
[
"value":"2",
"test":"test"
]
]
]
]
То, что я хочу после применения метода фильтрации на моем первоначальном тестовом массиве:
[
["Objects":
[
[
"value":"1",
"test":"test"
],
[
"value":"1",
"test":"test"
],
[
"value":"1",
"test":"test"
],
[
"value":"4",
"test":"test"
]
]
],
["Objects":
[
[
"value":"4",
"test":"test"
]
]
]
]
Мой код в детскую площадку:
//Filter objects with matching enabled filters
let filtered = test.filter({
let currentObjects = $0["Objects"] as! [[String:AnyObject]]
let currentsObjectsFiltered = currentObjects.filter({
if let value = $0["value"] as? String {
return filterValues.contains(value)
}
return false
})
print(currentsObjectsFiltered)
return false
})
Массив «currentsObjectsFiltered
» хорошо фильтруется с требуемыми значениями. Но мне нужен исходный массив «filtered
» со структурой массива test
, а не новый массив, который просто фильтруется с новыми объектами. Я не знаю, что делать с моим фильтрованной массив «currentsObjectsFiltered
»
Я думаю, что я должен использовать его теперь, когда я объекты отсортирован, но как ...
EDIT
currentsObjectsFiltered
выхода:
[["value": 1, "test": test], ["value": 1, "test": test], ["value": 1, "test": test], ["value": 1, "test": test], ["value": 4, "test": test], ["value": 4, "test": test]]
[["value": 1, "test": test], ["value": 1, "test": test], ["value": 1, "test": test], ["value": 1, "test": test], ["value": 4, "test": test], ["value": 4, "test": test]]
не обращайте внимание на количество значений результатов на выходе не имеет один и тот же массив теста, я просто выкладываю выход, чтобы показать вам структуру currentsObjectsFiltered
, который хорошо фильтруется.
Я думаю, что не могу сделать это на одном шаге фильтра, потому что метод фильтра применяется только к дочерним элементам фильтрованного массива, а не к дочерним элементам дочерних элементов. Поэтому я могу просто фильтровать «Objects
» в соответствии с заявлением, я не могу отфильтровать дочерние слова «Objects
» словарей, кто-нибудь может это подтвердить?
Любая помощь? Благодарю.