Всем привет!
Есть три объекта - “Категория”, “Подкатегория” и “Продукт”. Категорий может быть n кол-во. У любой категории может быть n кол-во подкатегорий. Подкатегорий может быть n кол-во. У подкатегории, также, продуктов может быть n.
У Категории, подкатегории, и у продукта есть code и name
Получаются такие структуры -
struct ObjInfo: Codable {
var code: String?
var name: String?
}
struct UniversalModel: Codable {
var info = ObjInfo()
var products: [UniversalModel]?
var subCategory[UniversalModel]?
}
Я создал словарь [ObjInfo : [UniversalModel]]
, где - ключ является родительским элементом, а значение массивом дочерних элементов. Ну то есть, к примеру, у нас словарь подкатегорий:
- Ключ является информацией о категории, к которой принадлежит массив подкатегорий
- Значение является массивом подкатегорий, который принадлежит определенной категории.
Необходимо написать метод для поиска подкатегории, чтобы я смог найти информацию о родителе (родительская категория).
Допустим, у меня есть некий code объект подкатегории. Я его вношу в метод и получаю информацию о родителе (категория). Сейчас есть метод, но мне кажется, что его можно как-то улучшить. Снизить сложность алгоритма. На данный момент, сложность алгоритма O((n+m)^2)
Вот метод -
func findParentObject(code: String?, searchDict: [ObjInfo : [UniversalModel]]) -> ObjInfo? {
var findedObj: ObjInfo?
for element in searchDict {
for parent in element.value {
if parent.info.code == code {
findedObj = element.key
break
}
}
}
return findedObj
}
Можно-ли как-то упростить данный алгоритм?