Сортировка пользовательского массива на основе String Array - PullRequest
1 голос
/ 08 апреля 2019

Я должен 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 работает нормально в режиме И, но я должен фильтровать это способом ИЛИ. Я имею в виду это должно быть как:

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

Пожалуйста, кто-нибудь предложит мне.

1 Ответ

2 голосов
/ 08 апреля 2019

Это должно сделать.

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]()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...