Вы можете использовать один compactMap
, так как сначала вам нужно filter
ваш Dictionary
, чтобы сохранить только значения true
, затем вам нужно map
, чтобы вернуть key
соответствует значениям true
. Однако вы всегда можете объединить последующие вызовы filter
и map
в один compactMap
, так как compactMap
сохраняет только значения non-nil
, поэтому вместо возврата логического значения, как вы бы сделали для filter
, в случае, если ваш условие оценивается как true, вы возвращаете все, что вернете в map
, в противном случае вы возвращаете nil
.
let trueKeys = dict.compactMap({key, value in value ? key : nil})
Чтобы объединить ключи в одну строку, вы можете просто позвонить joined
по результату compactMap
.
let graphQueryString = dict.compactMap({key, value in value ? "\"\(key)\"" : nil}).joined(separator: ",") // ""Objct3","Objct1""
Имейте в виду, что порядок ваших ключей не обязательно будет таким же, как вы объявили Dictionary
, так как Dictionary
является неупорядоченной коллекцией по определению. Если вы хотите сохранить порядок, вы можете использовать массив кортежей вместо Dictionary
, где кортеж будет состоять из пар ключ-значение.