根据字符串数组

时间:2019-04-08 10:30:20

标签: arrays swift sorting filter

我必须基于另一个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)}

请任何人建议我。

1 个答案:

答案 0 :(得分:2)

这应该做。

customArray.filter({ !Set($0.genreArray).intersection(Set(genreStringArray)).isEmpty })

不需要额外的for循环。只需检查对象的genreStringArraygenreArray是否具有相同的元素即可。如果是这样,则将其过滤掉。


提示:您可能应该为变量使用更好的命名方式,以减少混乱和简单。像这样的东西?

class Song {
    var id: String?
    var title: String?
    var artist: String?
    var isrc: String? // I don't know what this is!

    var genres = [String]()
}