我有一个"Option"
类型的数组。
班级Option
包含元素optionDetail
。
班级optionDetail
包含detailTraits
元素,[String]
,每个字符串称为detailTraitName
。
所以我获取detailTraits的结构看起来像Option
- > optionDetail
- > detailTraits
会返回给我[String]
,或Option
- > optionDetail
- > detailTraits
- > detailTraitName
,它只返回一个String
我想将detailTraits
数组与另一个名为selectedDetails
的数组匹配,该数组是[String]
,并找到所有selectedDetails
所在的元素包含在detailTraits
内。然后我想要返回这种情况属实的所有Option
。
例如,如果我的selectedDetails
数组包含["A", "B"]
,并且我有一个detailTraits
数组,其["A","C"]
和["A"]
数组["A", "B", "C"]
已detailTraits
,我只想返回["A", "B", "C"]
newOptions = option.filter({ $0.optionDetail?.detailTraits.filter({ selectedDetails.contains($0.detailTraitName ?? "") }).count == selectedDetails.count })
我目前的代码如下所示:
popHead()
有更好的方法吗?这个算法似乎非常低效,因为它可能在N ^ 3的数量级,但我不能想出一个更好的方法来查看数组并将它与另一个数组匹配。
谢谢!
答案 0 :(得分:0)
您可以首先通过比较count
和selectedDetails
上的detailTraits
,然后比较实际值来进行优化。这样,选项集将减少到仅具有完全相同计数的detailTraits
。例如,您只需要将字符串值与包含完全3个项目的数组进行比较(如果selectedDetails
为["A", "B", "C"]
),则完全避免循环中的一次迭代。
希望这有帮助