我必须基于另一个sort
(即我的array
,具有多种类型,Custom class
SongItem
'array
'中的String array
必须应用OR
验证)。
假设我的Custom array
是:
class SongItem: NSObject {
var songId: String?
var title: String?
var artistName: String?
var isrc: String?
var genreArray = [String]()
}
<SongItem: 0x1c03097e0>
<SongItem: 0x1c03097e0>
<SongItem: 0x1c03097e0>
<SongItem: 0x1c03097e0>
<SongItem: 0x1c03097e0>
<SongItem: 0x1c03097e0>
我还有另一个String array
,它具有三个值:
genreStringArray = ["Music","Alternative","Blues"]
现在我必须基于另一个filter
Custom array
我的String array
。
这是我的代码:
for i in 0..<genreStringArray.count {
let genre = genreStringArray[i]
self.customArray = self.customArray.filter({ $0.genreArray.contains(genre) })
}
由于我在这里使用for loop
,因此filtering
以AND方式工作正常,但是我必须使用OR方式进行过滤。我的意思是:
self.datasource = self.datasource.filter { $0.genreArray.contains(genre1) || $0.genreArray.contains(genre2) || $0.genreArray.contains(genre3)}
请任何人建议我。
答案 0 :(得分:2)
这应该做。
customArray.filter({ !Set($0.genreArray).intersection(Set(genreStringArray)).isEmpty })
不需要额外的for
循环。只需检查对象的genreStringArray
和genreArray
是否具有相同的元素即可。如果是这样,则将其过滤掉。
提示:您可能应该为变量使用更好的命名方式,以减少混乱和简单。像这样的东西?
class Song {
var id: String?
var title: String?
var artist: String?
var isrc: String? // I don't know what this is!
var genres = [String]()
}