我想要这个代码的Swift版本:
NSArray *sortedNames = [names sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
Run Code Online (Sandbox Code Playgroud)
Mir*_*ekE 69
var names = [ "Alpha", "alpha", "bravo"]
var sortedNames = names.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
Run Code Online (Sandbox Code Playgroud)
更新:根据SO用户的建议提供解释.
与ObjC不同,在Swift中你有sort()(和sort())方法,它接受你提供的闭包,它返回一个布尔值,指示一个元素应该在(true)之前还是在(另一个)之后.$ 0和$ 1是要比较的元素.我使用localizedCaseInsensitiveCompare来获取您要查找的结果.现在,localizedCaseInsensitiveCompare返回排序类型,因此我需要修改它以返回适当的bool值.
更新斯威夫特2:
sorted
和sort
由被替换sort
和sortInPlace
Sel*_*lva 20
定义初始名称数组:
var names = [ "gamma", "Alpha", "alpha", "bravo"]
Run Code Online (Sandbox Code Playgroud)
方法1:
var sortedNames = sorted(names, {$0 < $1})
// sortedNames becomes "[Alpha, alpha, bravo, gamma]"
Run Code Online (Sandbox Code Playgroud)
这可以进一步简化为:
var sortedNames = sorted(names, <)
// ["Alpha", "alpha", "bravo", "gamma"]
var reverseSorted = sorted(names, >)
// ["gamma", "bravo", "alpha", "Alpha"]
Run Code Online (Sandbox Code Playgroud)
方法2:
names.sort(){$0 < $1}
// names become sorted as this --> "[Alpha, alpha, bravo, gamma]"
Run Code Online (Sandbox Code Playgroud)
eri*_*cgu 18
如果您的数组不包含自定义对象(只是字符串或数字类型):
var sortedNames = sorted(names, <)
Run Code Online (Sandbox Code Playgroud)
否则,如果您在其中创建包含自定义属性的自定义数据对象类:
customDataObjectArray.sort({ $0.customProperty < $1.customProperty })
Run Code Online (Sandbox Code Playgroud)
使用运算符重载是在Swift语言中对字符串进行排序的最有效方法.
// OPERATOR OVERLOADING
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
var sortedNames = sorted(names, <)
var reverseOrder = sorted(names, >)
Run Code Online (Sandbox Code Playgroud)
在上面的代码中>
,<
运算符在Swift中重载以对字符串进行排序.
我在Playground中测试了代码并得出结论,当我们使用运算符重载时,最好对字符串进行排序.
复制到Playground.
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, >)
Run Code Online (Sandbox Code Playgroud)
游乐场的结论:
从上面的图像中,您可以看到所有其他方法需要枚举循环以对5个字符串进行排序.当我们使用运算符重载时,它不需要枚举循环来排序字符串.
参考Swift文档
归档时间: |
|
查看次数: |
40339 次 |
最近记录: |