在
Xcode(
Swift)中,我有一个初始化为100个空项的数组:
var persons = [String](count:100,repeatedValue: "")
所以例如我的数组在某个特定时刻:
["Bert","Daniel","Claire","Aaron","",... ""]
用点表示其余的空项目.我使用此函数按字母顺序对数组进行排序:
persons = persons.sorted {$0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
这给了我一个像这样的数组:
["",...,"Bert","Daniel"]
我想要的是按字母顺序排序我的数组,而不是前面的空项目.我需要得到一个像:
["Aaron",""]
就我而言,我不想要一个带有空项的数组但是我发现如果我没有声明像100个项目那么我就无法为我的数组添加一个值(该数组不会被填充到100个项目,这是为了当然).
谁能帮我吗?
解决方法
正如@Antonio所说,看起来你需要一个降序的字符串集.除了@Antonio的答案中的Dictionary方法(效果很好),你也可以使用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 )}
然后,当您希望将人们作为数组时,您可以使用allObjects强制转换为[String]:
personSet.allObjects as [String]
你可以像你现在一样对它进行排序:
let people = (personSet.allObjects as [String]).sort {$0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
这让人们:
[Aaron,Bert,Claire,Daniel]
对于那些想知道如何按照问题中最初所述的方式对数组进行排序(升序但最后用空字符串)的人来说,这可以通过sort函数中的一些自定义逻辑来完成:
var persons = ["Bert",""] persons.sort { (a,b) -> Bool in if a.isEmpty { return false } else if b.isEmpty { return true } else { return a.localizedCaseInsensitiveCompare(b) == .OrderedAscending } }
结果:
["Aaron",""]