文章目录
  1. 1. 数组
  2. 2. 字典

原文链接:Sorting Array and Dictionaries in Swift

Swift 中集合排序是简单的,每个实现Collection或者Sequence的协议的对象都可以使用sorted(by:)方法进行排序。

这个方法使用插入排序进行排序,序列中的元素需要遵从Comparable,并且没有提供可选的排序方法时,元素将被按照升序排列。

数组

定义一个包含各种水果的数组:

1
var fruits = ["orange","apple","melon","lemon","coconut","miracle fruit"]

排序代码很简单,使用下面的语句将获得排序后的数组:

1
fruits.sorted() // 输出: ["apple", "coconut", "lemon", "melon", "miracle fruit", "orange"]

可以传入大于操作符>改变排序顺序,序列将按照降序方式输出:

1
fruits.sorted(by:>) // Will print ["orange", "miracle fruit", "melon", "lemon", "coconut", "apple"]

显然我们也可以自定义比较方法,使得序列按照不同的标准排序,比如,以下的例子就是按照名字长度大小来排序的:

1
2
3
4
fruits.sorted{
$0.characters.count > $1.characters.count
}
// Will print ["miracle fruit", "coconut", "orange", "apple", "melon", "lemon"]

字典

字典遵从Collection,所以上面提到的对数组的操作,都可以运用到字典中。这里我们定义一个菜单和对应原材料的字典。

1
2
3
4
5
6
var recipes = [
"Lasagna" : ["Meat and tomato sauce","Lasagna pasta","Bechamel Sauce","Nutmeg","Parmigiano"],
"Vegetable Dumpling" : ["Dumpling dough","Vegetable filling"],
"Pizza" : ["Pizza dough","Tomato sauce","Olive oil","Mozzarella","Basil"],
"Curry Laksa" : ["Vegetable oil","Chicken stock","Chicken thighs","King prawns","Coconut milk","Fish balls"," Beansprouts","Thin rice noodles","Laska spicy paste"]
]

接下来对字典按照菜单名字升序处理:

1
2
3
4
recipes.sorted(by:{
(e1:(String,[String]), e2:(String,[String])) -> Bool in
e1.0 < e2.0
})

接着进行不同的排序方式,按照原材料的个数从高到低排序:

1
2
3
recipes.sorted(by:{
$0.value.count > $1.value.count
})

自定义对象序列可以进行排序的前提是,自定义对象只需要遵循Comparable协议,该协议实现了 5 个比较方法:<>==<=>=,每一个方法都返回比较结果的布尔值。

文章目录
  1. 1. 数组
  2. 2. 字典