Swift - Календарная дата 1 inSameDayAs date 2 для словаря дат временных отметок, который возвращает массив только одной даты и сколько раз повторяется - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть [Int64:[String:String]], где Int64 - отметка времени.Как обнаружить и удалить даты того же дня, когда один из аргументов в [String:String] равен ["name"] = "test" и повторяется несколько раз, а также добавить в словаре, сколько ["times"] повторяется.

Пример [Int64:[String:String]]

    [1543058992:["name:"test"], 1543058988:["name:"test"],
     1543058990:["name:"test"], 1543058984:["name:"test2"],
     1543945308:["name:"test2"], 1543945208:["name:"test2]",
     1550058984:["name:"test3"]]

Ожидается [Int64:[String:String]] после обработки:

    [1543058992: ["name:"test", "times":"3"],
     1543058993: ["name:"test2", "times":"1"],
     1543945308: ["name:"test2", "times":"2"],
     1550058984: ["name:"test3"]]

1 Ответ

0 голосов
/ 06 декабря 2018
import Foundation
typealias YourDict = [Int64: [String: String]]
let initial: YourDict = [
    1543058992: ["name": "test"],
    1543058988: ["name": "test"],
    1543058990: ["name": "test"],
    1543058984: ["name": "test"],
    1543945308: ["name": "test2"],
    1543945208: ["name": "test2"],
    1550058984: ["name": "test3"]
]

var result: YourDict = [:]
let calendar = Calendar.current
initial.forEach { item in
    let key = item.key
    let currentValueDict = item.value
    var foundCheckingKey: Int64?
    let date = Date(timeIntervalSince1970: TimeInterval(key * 1000))
    if result.contains(where: { checkingItem in
        let checkingKey = checkingItem.key
        foundCheckingKey = checkingKey
        let checkingDate = Date(timeIntervalSince1970: TimeInterval(checkingKey * 1000))
        return calendar.isDate(date, inSameDayAs: checkingDate)
    }) {
        let previousCount = Int(result[foundCheckingKey!]!["times"]!)!
        result[foundCheckingKey!]!["times"] = "\(previousCount + 1)"
    } else {
        result[key] = ["name": currentValueDict["name"]!, "times": "1"]
    }
}
print(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...