2015-09-23 173 views
4

我選一個這樣的數組:排序功能2

var users = ["John", "Matt", "Mary", "Dani", "Steve"] 

func back (s1:String, s2:String) -> Bool 
{ 
    return s1 > s2 
} 

sorted(users, back) 

但我發現了這個錯誤

「排序」是不可用:所說的「排序()方法集合

在這裏使用sort()方法的正確方法是什麼?

回答

14

遵循什麼錯誤消息告訴您,以及收集調用sort

users.sort(back) 

注意,在斯威夫特2sorted現在是sort和老sort現在sortInPlace,無一不是被調用到數組本身(它們以前是全局函數)。

要小心,這在斯威夫特3再次改變,其中sort是,突變的方法,並sorted是一個返回一個新的數組。

1

另一種方式是在一個簡單的方式使用封閉:

users.sort({a, b in a > b}) 
3

使用封閉的另一種方法是:

var numbers = [2,4,34,6,33,1,67,20] 


var numbersSorted = numbers.sort({ (first, second) -> Bool in 

    return first < second 
}) 
+0

這導致類似的值 - [1,10,100,2,20,200]但我期待得到像 - [1,2,10,20,100] – bhakti123

1

SWIFT 2.2有多種方式,我們可以使用閉排序功能如下。

考慮陣列

var names:[String] = ["aaa", "ddd", "rrr", "bbb"]; 

不同的選項進行排序以迅速封閉陣列是爲添加

選項1

// In line with default closure format. 
names = names.sort({ (s1: String, s2: String) -> Bool in return s1 < s2 }) 
print(names) 

選項2

// Omitted args types 
names = names.sort({ s1, s2 in return s1 > s2 }) 
print(names) 

選項3

// Omitted args types and return keyword as well 
names = names.sort({ s1, s2 in s1 < s2 }) 
print(names) 

選項4

// Shorthand Argument Names(with $ symbol) 
// Omitted the arguments area completely. 
names = names.sort({ $0 < $1 }) 
print(names) 

選項5

這是在排序函數使用閉合的最簡單的方法。

// With Operator Functions 
names = names.sort(>) 
print(names) 
0
var array = [1, 5, 3, 2, 4] 

雨燕2.3

let sortedArray = array.sort() 

雨燕3.0

let sortedArray = array.sorted()