Swift - проверьте, что у двух массивов одинаковый день без зацикливания - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть 2 массива [Date]

Первый - с myDates:[Date]

Второй - с coreDataDates:[Date]

Я собираюсь зациклить второй массивс базовыми датами данных

Как проверить в цикле ДЕНЬ из myDates, существующий в coreDataDates?

Я знаю, что могу использовать функциюNSCalendar isDate(_:inSameDayAs:), но есть ли функция, которую мне не нужно зацикливать myDates:[Date] в цикле coreDataDates:[Date] for?

Пример новичка:

for date1 in coreDataDates{
   for date2 in myDates{
        if(Calendar.current.isDate(date1, inSameDayAs: date2)==true){
             //have it
        }else{
             //don't have it
        }
   }
}

Мне нужен код, которыйМне не нужно использовать цикл в цикле

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Вы можете использовать возможности класса Set

let dateSet = Set(myDates)
let common = dateSet.intersection(coreDataDates) 
//If you want it as an array
let commonDatesArray = Array(common)

См. Документацию для класса Set для получения дополнительной информации.

0 голосов
/ 05 декабря 2018

Если вы не заботитесь о времени, Apple рекомендует установить время на полдень, потому что у каждого дня полдень, а не полночь из-за смены часов на летнее время.

Преобразование всех дат вдва массива до полудня, а затем найти объединение двух наборов:

import Foundation

extension Date {
    var noon: Date {
        return Calendar.current.date(bySettingHour: 12, minute: 0, second: 0, of: self)!
    }
}

let myDates = [
    DateComponents(calendar: .current, year: 2018, month: 12, day: 1, hour: 1).date!,
    DateComponents(calendar: .current, year: 2018, month: 12, day: 2, hour: 2).date!,
    DateComponents(calendar: .current, year: 2018, month: 12, day: 4, hour: 3).date!
]
let coreDataDates = [
    DateComponents(calendar: .current, year: 2018, month: 12, day: 1, hour: 4).date!,
    DateComponents(calendar: .current, year: 2018, month: 12, day: 3, hour: 5).date!,
    DateComponents(calendar: .current, year: 2018, month: 12, day: 4, hour: 6).date!
]

let myDateSet = Set(myDates.map { $0.noon })
let coreDataDateSet = Set(coreDataDates.map { $0.noon })
let commonDateSet = myDateSet.intersection(coreDataDateSet)
print(commonDateSet)
0 голосов
/ 05 декабря 2018

Что-то вроде:

let date1 = Date(timeIntervalSince1970: 1544019937)
let date2 = Date(timeIntervalSince1970: 1544019936)
let date3 = Date(timeIntervalSince1970: 1544019935)
let date4 = Date(timeIntervalSince1970: 1544019934)
let date5 = Date(timeIntervalSince1970: 1544019933)
let date6 = Date(timeIntervalSince1970: 1544019932)

let arr1 = [date1, date2, date3]
let arr2 = [date4, date5, date6]
print(arr2.filter { arr1.contains($0) }.count > 0 ) // false

let arr1 = [date1, date2, date3]
let arr2 = [date1, date5, date6]
print(arr2.filter { arr1.contains($0) }.count > 0 ) // true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...