假设我们有一个名为imageFile的自定义类,这个类包含两个属性 .
class imageFile {
var fileName = String()
var fileID = Int()
}
很多都存储在Array中
var images : Array = []
var aImage = imageFile()
aImage.fileName = "image1.png"
aImage.fileID = 101
images.append(aImage)
aImage = imageFile()
aImage.fileName = "image1.png"
aImage.fileID = 202
images.append(aImage)
问题是:如何通过'fileID'ASC或DESC对图像数组进行排序?
15 回答
[更新了Swift 3 with sort(by :)]这个,利用了一个尾随的闭包:
在哪里使用
<
或>
,分别取决于ASC或DESC . If you want to modify the images array ,然后使用以下内容:如果您要反复执行此操作并且更喜欢定义函数,则一种方法是:
然后用作:
如果要对原始自定义对象数组进行排序 . 这是Swift 2.1中另一种方法
id
是整数 . 您也可以为String
属性使用相同的<
运算符 .您可以在此处查看示例,了解有关其使用的更多信息:Swift2: Nearby Customers
如果您不使用自定义对象,而是使用值类型来实现Comparable协议(Int,String等..),您可以简单地执行此操作:
一个例子:
Swift 3
In Swift 3.0
Swift 2 through 4
原始答案试图使用某些属性对一组自定义对象进行排序 . 下面我将向您展示一些方便的方法来执行与快速数据结构相同的行为!
一点点事情都没有,我稍微改变了ImageFile . 考虑到这一点,我创建了一个包含 three 图像文件的数组 . 请注意,元数据是一个可选值,传递为nil作为参数是预期的 .
ImageFile有一个名为size的属性 . 对于以下示例,我将向您展示如何使用具有大小等属性的排序操作 .
smallest to biggest size (<)
biggest to smallest (>)
接下来,我们将使用String属性名称进行排序 . 以相同的方式,使用sort来比较字符串 . 但请注意内部块返回比较结果 . 此结果将定义排序 .
A-Z (.orderedAscending)
Z-A (.orderedDescending)
接下来是我最喜欢的排序方式,在很多情况下,一个将具有可选属性 . 现在别担心,除了我们必须处理nil之外,我们将按照与上面相同的方式进行排序!在 生产环境 中;
I used this code to force all instances in my array with nil property values to be last. Then order metadata using the assumed unwrapped values.
可以对选项进行二次排序 . 例如;可以使用元数据显示图像并按大小排序 .
你也可以这样做
所以你的图像数组将被存储为已排序
几乎每个人都给出了如何直接,让我展示演变:
你可以使用Array的实例方法:
有关sort的工作原理的详细说明,请参阅The Sorted Function .
Swift 4.0,4.1和4.2首先,我创建了类型为imageFile()的可变数组,如下所示
创建imageFile()类型的可变对象图像,并为属性赋值,如下所示
现在,将此对象追加到数组arr
现在,将不同的属性分配给相同的可变对象,即图像
现在,再次将图像对象追加到数组arr
现在,我们将在数组arr对象的fileId属性上应用 Ascending order . 使用 < symbol 进行升序
现在,我们将在数组arr对象的fileId属性上应用 Descending order . 使用 > symbol 降序
In Swift 4.1. & 4.2 For sorted order use
如果您要在多个位置对此数组进行排序,那么使您的数组类型可比较是有意义的 .
使用Swift 4,
Array
有两个名为sorted()和sorted(by:)的方法 . 第一种方法sorted()
具有以下声明:第二种方法
sorted(by:)
具有以下声明:1.按可比较对象的升序排序
如果集合中的元素类型符合
Comparable
协议,则可以使用sorted()
以按升序对元素进行排序 . 以下Playground代码显示了如何使用sorted()
:2.按类似对象的降序排序
如果集合中的元素类型符合
Comparable
协议,则必须使用sorted(by:)
才能按降序对元素进行排序 .3.对不可比较的对象按升序或降序排序
如果集合中的元素类型不符合
Comparable
协议,则必须使用sorted(by:)
才能按升序或降序对元素进行排序 .请注意,如果您需要就地对集合进行排序,Swift还提供了两个名为sort()和sort(by:)的方法作为
sorted()
和sorted(by:)
的对应方式 .我是这样做的,它有效:
var images = [imageFile]() images.sorted(by: {$0.fileID.compare($1.fileID) == .orderedAscending })
首先,将您的Array声明为类型化数组,以便您可以迭代时调用方法:
然后你可以简单地做:
Swift 2
Swift 3 & 4
上面的示例给出 desc 排序顺序
Two alternatives
1)使用sortInPlace对原始数组进行排序
2)使用替代数组来存储有序数组
印刷品:
"["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"