У меня есть один массив Swift из 10 000 структур:
struct Book {
var id: Int?
var name: String?
var pages: Int?
var words: Int?
}
var firstArray: [Book] = [] // contains 10,000 elements
, и у меня есть второй массив Swift типа Int с 5000 элементами:
var secondArray: [Int] = [] // contains 5,000 elements
Я хочу отфильтроватьfirstArray, удалив все элементы в нем, где поле id (Book.id) не содержится во secondArray.
Зная, что Book.id уникален для каждого элемента в firstArray, а также в последовательности (от малого добольшой).например.1, 2, 3, 6, 8, 10, 14, 15, 16, 40, 50, 51 и т. Д. (Некоторые числа могут быть пропущены)
Второй массив также уникален и имеет последовательность (маленькийк большому)
Какой самый быстрый способ отфильтровать firstArray в Swift 4?
Зная, что массивы представляют собой последовательность, фильтрация должна стать быстрее, когда мы правильно обработаем массив?То есть, если мы находимся на полпути через firstArray, мы будем циклически проходить только половину firstArray в поисках совпадения в secondArray.То же самое для secondArray, так как массив будет уменьшаться каждый раз, когда мы находим совпадение.Это все имеет смысл?
Надеюсь, кто-то там знает, как это сделать.Я видел, как это делается на Android (Kotlin), но как это сделать в Swift?
Я думаю, что в Kotlin это так:
firstArray?.let { dataFirstArray ->
secondArray?.let {
firstArray = ArrayList(dataFirstArray.asSequence().filter { dataSecondArray -> dataSecondArray in it }.toList())
}
}