У меня есть следующий массив, который содержит искомый продукт пользователем; После поиска теги продукта также сохраняются в массиве searchTags, как показано ниже:
searchedTags = [ [product : [tagA, tagB, tagC, tagD, tagH ]] ]
Теперь у меня есть список массивов всех продуктов, который содержит различные теги для каждого продукта:
productTagsArray = [ [product1 : [tagA, tagB, tagC, tagD]],
[product2 : [tagC, tagD, tagE, tagF, tag H]],
[product3 : [tagH, tagI, tagJ]],
[product4 : [tagK, tagL, tagM]],
...
]
Теперь я хотел бы проверить и сравнить теги из найденного продукта в searchedTags
с каждым продуктом в productTagsArray
. После сравнения я хотел бы создать новый массив товаров, отсортированных по КОЛИЧЕСТВАМ тегов, сопоставленных (по убыванию) с найденными товарами. Если метки не совпадают, я не хочу включать их в новую переменную. Я хотел бы заполнить результат этого отсортированного соответствия, как показано ниже:
sortedProductsByCount = [[productId : product1, numberOfTagsMatched : 4],
[productId : product2, numberOfTagsMatched : 2],
[productId : product1, numberOfTagsMatched : 1]
]
Редактировать: Это то, для чего я написал, когда пользователь нажимает на результат поиска в табличном представлении:
var productsTagCount: [[String:Any]] = [[:]]
for tags in searchedProductTags {
for tag in tags {
for productArray in productTagsArray {
for product in productArray {
var tagCount: Int = 0
for productTag in product.value {
if productTag == tag {
tagCount = tagCount + 1
}
}
let data: [String : Any] = [
"productId": product.key,
"tagCount": tagCount
]
productsTagCount.append(data)
}
}
}
}
Есть ли лучший способ? Как я могу выполнить sh массив sortedProductByCount
?