Пользовательский объект уменьшает значения для аналогичного ключа в swift - PullRequest
0 голосов
/ 09 июля 2020

Я создал словарь уникальных ключей, используя словарь (группировка: по) из объекта модели fetchRequest Cored Data в форме [GeneralCategory]. Теперь я хотел бы найти способ уменьшить конкретный параметр c в значении словаря (в данном случае логическое значение, которое я преобразовал в двойное).

struct GeneralCategory {
    var drank: Bool?
    var dateOnly: String?
    var otherParam1
    var otherParam2
    etc
}

let groupedDict = Dictionary(grouping: coreDataFetch) { ($0.dateOnly!) }.reduce(into: [String: Double]()) { $0[$1.key] = Double($1.1.count) }

// returns the reduced parameter across all keys, not per key

Как бы мне go об уменьшении значений на ключ, чтобы я мог go из


[["7-7-20": 1.0, 0.0, 1.0],["7-8-20": 0.0, 1.0], ["7-9-20": 0.0, 1.0, 0.0 ,1.0]]

to 

[["7-7-20": 2.0],["7-8-20": 1.0], ["7-9-20": 2.0]]

Заранее спасибо за любой совет, надеюсь, я был ясен в вопросе (первый пост).

1 Ответ

0 голосов
/ 09 июля 2020

Используйте mapValues(_:) и reduce(_:_:), чтобы получить ожидаемый результат.

В reduce(_:_:) вам просто нужно проверить, drank равно true и соответственно увеличьте счетчик.

let groupedDict = Dictionary(grouping: coreDataFetch) { $0.dateOnly }.mapValues {
    $0.reduce(0.0) { (result, category) -> Double in
        if let drank = category.drank, drank {
            return result + 1.0
        }
        return result
    }
}

Примечание: Я не вижу смысла использовать здесь Double. Вместо этого вы можете использовать тип Int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...