arrays - 基于字符串数组对自定义数组进行排序

标签 arrays swift sorting filter

我必须根据另一个数组对自定义类SongItem”的数组进行排序 这是我的具有多种类型的 String 数组(必须应用 OR 验证)。

假设我的自定义数组是:

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>

我有另一个具有三个值的字符串数组:

genreStringArray = ["Music","Alternative","Blues"]

现在我必须根据另一个字符串数组过滤我的自定义数组

这是我的代码:

for i in 0..<genreStringArray.count {

     let genre  = genreStringArray[i]
     self.customArray = self.customArray.filter({ $0.genreArray.contains(genre) })
}

因为我在这里使用 for 循环,所以 filtering 以 AND 方式工作正常,但我必须以 OR 方式过滤它。我的意思是这应该是这样的:

self.datasource = self.datasource.filter { $0.genreArray.contains(genre1) || $0.genreArray.contains(genre2) || $0.genreArray.contains(genre3)}

请任何人给我建议。

最佳答案

这应该可以。

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]()
}

关于arrays - 基于字符串数组对自定义数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55571363/

相关文章:

javascript - 从一个数组中提取项目并添加到现有数组 Javascript

javascript - 使用 Array.every() 函数检查是否定义了所有值

ios - 参数类型 'Range<Int>' 不符合预期类型 'Sequence' Swift3

ios - 基于Segment-Control将数组加载到TableView

ios - 网关挑战处理程序 : handleChallenge() not being called after upgrading to MobileFirst v. 8.0

java - 错误排序数组中的负数(双)

javascript - IE Array.sort 不使用比较函数排序

javascript - 根据用户选择 knockout 更改数据绑定(bind)

ios - 如何在 "viewForHeaderInSection"中为 UILabel View 设置自动布局约束

Javascript sort() 不适用于 Chrome 中超过 10 个对象的数组