我需要这段代码的Swift版本:
NSArray *sortedNames = [names sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
我需要这段代码的Swift版本:
NSArray *sortedNames = [names sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
var names = [ "Alpha", "alpha", "bravo"]
var sortedNames = names.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
更新:按照另一位SO用户的建议提供解释。sorted
和sort
已被sort
和sortInPlace
替换。sort
而不是 sorted
。 - MirekE定义一个初始的名字数组:
var names = [ "gamma", "Alpha", "alpha", "bravo"]
方法1:
var sortedNames = sorted(names, {$0 < $1})
// sortedNames becomes "[Alpha, alpha, bravo, gamma]"
这可以进一步简化为:
var sortedNames = sorted(names, <)
// ["Alpha", "alpha", "bravo", "gamma"]
var reverseSorted = sorted(names, >)
// ["gamma", "bravo", "alpha", "Alpha"]
方法2:
names.sort(){$0 < $1}
// names become sorted as this --> "[Alpha, alpha, bravo, gamma]"
var names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
var sortedNames = names.sorted(by: {$0 < $1})
print(sortedNames)
var sortedNames2: () = names.sort(by: {$0 < $1})
print(sortedNames2)
为什么sortedNames2返回一个空数组?
谢谢 - DrDevvar sortedNames = sorted(names, <)
否则,如果您在内部创建一个包含自定义属性的自定义数据对象类:customDataObjectArray.sort({ $0.customProperty < $1.customProperty })
在Swift语言中,使用运算符重载是对字符串进行排序的最有效方法。
// OPERATOR OVERLOADING
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
var sortedNames = sorted(names, <)
var reverseOrder = sorted(names, >)
>
和<
运算符以对字符串进行排序。let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
var reversed = sorted (names,
// This is a closure
{ (s1 : String, s2 : String) -> Bool in
return s1 > s2
}
)
println(reversed)
var reverseOrder = sorted(names, {s1, s2 in s1 > s2})
var reverseOrder2 = sorted(names, { $0 > $1} )
// OPERATOR OVERLOADING
var reverseOrder3 = sorted(names, >)
var arrayName = sorted(arrayName, <)
sorted()是Swift中预定义的函数,其中使用<表示数组应按升序排序。如果您想按降序对数组进行排序,则只需用>替换<,如下所示:
var arrayName = sorted(arrayName, >)
sortedArrayUsingSelector:
方法一起使用的方法都可以在Swift sort
(或sorted
)中使用,只要数组中的元素类型是已知的。因此,在您的代码中:var arr : [String] = // ...
// it is an array of String, so we can use localizedCaseInsensitiveCompare:
sort(&arr) {return $0.localizedCaseInsensitiveCompare($1) == .OrderedAscending}
var events : [EKEvent] = // ...
sort(&events) {return $0.compareStartDateWithEvent($1) == .OrderedAscending}
func sort<T : Comparable>(inout array: [T])
但是如果您想使用 localizedCaseInsensitiveCompare:
,您的代码可以直接使用 NSArray
进行翻译。
let students: Set = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
let sortedStudents = students.sorted()
print(sortedStudents)
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
let descendingStudents = students.sorted(isOrderedBefore: >)
print(descendingStudents)
// Prints "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"