【发布时间】:2017-11-16 15:11:41
【问题描述】:
我有一个"Option" 类型的数组。
类Option包含一个元素optionDetail。
optionDetail 类包含detailTraits 的元素,这是一个[String],每个字符串都称为detailTraitName。
所以我获取detailTraits的结构看起来像Option -> optionDetail -> detailTraits这将返回我[String],或Option -> optionDetail -> detailTraits -> @ 987654335@,只会返回一个字符串
我想将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 })
有没有更好的方法来做到这一点?这个算法似乎效率很低,因为它可能在 N^3 的数量级上,但我想不出更好的方法来查看数组数组并将其与另一个数组匹配。
谢谢!
【问题讨论】:
-
请编辑您的问题以添加
Option类的定义
标签: arrays swift algorithm filter