我正在尝试按字母顺序排列[String:Any]数组。到目前为止我有这个:
func filterList() {
self.titleData.sort() {
item1, item2 in
let title1 = item1["title"] as! String
let title2 = item2["title"] as! String
return title1.localizedCaseInsensitiveCompare(title2) == ComparisonResult.orderedAscending
}
self.myCollectionTableView.reloadData()
}
它工作正常。但是,title1和title2是电影标题,因此我想在按字母顺序排列时忽略“The”,但在TableView中返回完整的标题。我尝试的一切(如字符串中包含“The”的子字符串)只是让我感到困惑,任何帮助都表示赞赏!
答案 0 :(得分:1)
你需要删除任何领先的"" (或" a"或" a"也许 - 并且可能也会处理其他语言)然后比较更新的标题。
这里足以让你开始删除任何领先""。
func removeLeadingArticle(from string: String) -> String {
// This is a simple example. Expand to support other articles and languages as needed
let article = "the "
if string.length > article.length && string.lowercased().hasPrefix(article) {
return string.substring(from: string.index(string.startIndex, offsetBy: article.length))
} else {
return string
}
}
func filterList() {
self.titleData.sort() {
item1, item2 in
let title1 = removeLeadingArticle(from: item1["title"] as! String)
let title2 = removeLeadingArticle(from: item2["title"] as! String)
return title1.localizedCaseInsensitiveCompare(title2) == ComparisonResult.orderedAscending
}
self.myCollectionTableView.reloadData()
}
这还没有经过测试,所以可能会有一个拼写错误。
答案 1 :(得分:0)
以下是来自@rmaddy的回答的编辑后的工作代码:
func removeLeadingArticle(string: String) -> String {
let article = "the "
if string.characters.count > article.characters.count && string.lowercased().hasPrefix(article) {
return string.substring(from: string.index(string.startIndex, offsetBy: article.characters.count))
} else {
return string
}
}
func filterList() {
self.titleData.sort() {
item1, item2 in
let title1 = removeLeadingArticle(string: item1["title"] as! String)
let title2 = removeLeadingArticle(string: item2["title"] as! String)
return title1.localizedCaseInsensitiveCompare(title2) == ComparisonResult.orderedAscending
}
self.myCollectionTableView.reloadData()
}