我正在对Collection视图中的数据数组进行排序。我想通过3种方式对数据进行排序:按字母顺序,按数字方式,根本不排序(根本不排序应该对数据在模型中的设置顺序进行排序。)排序通过3个不同的UIButton进行。
在下面的代码中,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方法不会改变排序。它的顺序与之前按过的顺序相同。
据我了解,sorted对数据进行复制,因此保留了原始数据(而.sort修改了原始数据)。
如何更改上面的NO SORT方法以仅显示数据而不进行任何排序? (这表示精确地显示了模型中数据的设置方式
答案 0 :(得分:1)
如果原始数组没有可排序的顺序,那么我建议您不要修改原始数组。保留一个基于当前排序的第二个数组,并使用该第二个数组作为集合视图的数据模型的基础。
当用户选择其他排序方法时,您只需从未经修改的原始数组中更新第二个数组,然后重新加载集合视图即可。
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()
答案 1 :(得分:1)
您需要