在Xcode(Swift)中,我有一个初始化为100个空项目的数组:
var persons = [String](count:100, repeatedValue: "")
使用某些函数,我将内容添加到数组中的位置(从0开始)。
例如,我的数组在某个给定的时刻:
["Bert", "Daniel", "Claire", "Aaron", "", "", ... ""]
圆点代表其余的空项目。我使用此函数按字母顺序对数组进行排序:
persons = persons.sorted {$0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
这给了我一个像这样的数组:
["", "", ... , "Aaron", "Bert", "Claire", "Daniel"]
我想要的是按字母顺序对数组进行排序,但不要在前面有空项。我需要像这样返回一个数组:
["Aaron", "Bert", "Claire", "Daniel", "", "", ... , ""]
就我而言,我不希望有一个空项目的数组,但是我发现如果我不声明为100个项目,则无法向该数组添加值(该数组不会填充为100个项目,这是为了当然)。
谁能帮我吗?
正如@Antonio所说,您似乎需要按降序排列的字符串集。除了Dictionary
@Antonio的答案中的方法(效果很好)之外,您还可以使用NSMutableSet
(从Objective-C桥接):
let personSet = NSMutableSet()
personSet.addObject("Aaron")
personSet.addObject("Daniel")
personSet.addObject("Claire")
personSet.addObject("Aaron")
personSet.addObject("Bert")
personSet.addObject("Bert")
personSet.addObject("Joe")
personSet.removeObject("Joe") // You can remove too of course
创建集合:
{(
Claire,
Aaron,
Daniel,
Bert
)}
然后,当您希望人们作为时Array
,可以将allObjects
演员表转换为[String]
:
personSet.allObjects as [String]
您可以像现在一样对它进行排序:
let people = (personSet.allObjects as [String]).sort {$0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
这使得people
:
[Aaron, Bert, Claire, Daniel]
对于那些想知道如何Array
按问题中最初说明的那样进行排序(升序但末尾有空字符串)的人,可以在sort函数中使用一些自定义逻辑来完成:
var persons = ["Bert", "Daniel", "Claire", "Aaron", "", "", ""]
persons.sort { (a, b) -> Bool in
if a.isEmpty {
return false
} else if b.isEmpty {
return true
} else {
return a.localizedCaseInsensitiveCompare(b) == .OrderedAscending
}
}
结果:
["Aaron", "Bert", "Claire", "Daniel", "", "", ""]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句