Возврат отсортированного массива обратно в исходный порядок - PullRequest
0 голосов
/ 06 октября 2018

Я работаю над сортировкой массивов данных в представлении коллекции.Есть 3 способа сортировки данных: по алфавиту, по номерам и без сортировки вообще (сортировка вообще не должна сортировать данные по порядку, как они настроены в модели.) Сортировка происходит с помощью 3 различных кнопок UIB.

В моем коде ниже allAnimalsArray - это полный массив данных, который отображается в представлении коллекции.

// Animal Name button pressed
let sortAZ = allAnimalsArray.sorted(by: { $0.animalName < $1.animalName })
allAnimalsArray = sortAZ
allAnimalsCollectionView.reloadData()

// Animal Weight button pressed
let sortByWeight = allAnimalsArray.sorted(by: { $0.pounds < $1.pounds })
allAnimalsArray = sortByWeight
allAnimalsCollectionView.reloadData()

// NO SORT button pressed
let noSorting = allAnimalsArray
allAnimalsArray = noSorting
allAnimalsCollectionView.reloadData()

Моя проблема в том, что метод NO SORT не меняетsort. Он сохраняет тот же порядок, что и тот, который был нажат до него.

В моем понимании .sorted делает копию данных, поэтому исходные данные сохраняются (тогда как.сортировка изменяет исходные данные).

Как изменить вышеописанный метод NO SORT, чтобы просто отображать данные без какой-либо сортировки?(то есть отображается точно как данные настроены в модели)

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

вам нужно

  1. либо сохранить копию всего несортированного массива и использовать, когда вам нужно вернуть
  2. , либо хотя бы сохранить индексы этого массива, чтобы вы могли использоватьим навязать исходное несортированное состояние
0 голосов
/ 06 октября 2018

Если исходный массив не имеет сортируемого порядка, я советую вам никогда не изменять исходный массив.Сохраните второй массив, основанный на текущей сортировке, и используйте этот второй массив как основу модели данных представления коллекции.

Когда пользователь выбирает другой метод сортировки, вы просто обновляете второй массив из исходного, немодифицированный массив, а затем перезагрузите представление сбора.

let allAnimalsArray = ... // the original array that you never modify
var sortedArray = [YourAnimalClass]()

Все ваши методы источника данных основаны на sortedArray.

Если пользователь выбирает «не сортировать», тогда вы делаете:

sortedArray = allAnimalsArray
allAnimalsCollectionView.reloadData()

Если пользователь выбирает один из видов, то вы делаете:

sortedArray.allAnimalsArray.sorted(by: { $0.whatever < $1.whatever })
allAnimalsCollectionView.reloadData()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...