Если после группировки продуктов в словаре вы хотите отсортировать отдельные массивы продуктов для каждого из них, вы можете использовать mapValues
, например:
let results = Dictionary(grouping: products) { $0.isFresh }
.mapValues { $0.sorted { $0.date < $1.date } } // sort the subarrays of products within freshness categories
.sorted { $0.key && !$1.key } // sort by freshness
.flatMap { $0.value } // flatten the subarrays of products
(обратите внимание, вы используете $0.key < $1.key
, но логические значения не имеют собственного порядка сортировки, поэтому я использовал шаблон $0.key && !$1.key
.)
Но если вы действительно просто хотите получить плоский массив продуктов, сначала сортируйте по свежести, а затем date, я бы так и сделал:
let results = products.sorted {
if $0.isFresh != $1.isFresh { return $0.isFresh }
return $0.date < $1.date
}
Не связано, в то время как ваши строки дат сортируются, потому что их сортировка по алфавиту соответствует их хронологической сортировке, мы обычно используем Date
вместо этого объекты исключают двусмысленность и не делают сортировку зависимой от конкретного строкового представления дат.
Поэтому я бы предложил сделать свойство date
типом Date
и использовать для форматирования даты преобразователь эти строки для Date
объектов при заполнении этого массива Product
объектов.