我有以下模型课程的列表
struct CommonRes {
var month: String?
var monthName: String?
var year: String?
var classIdCount: String?
var groupName: String?
}
var res = [CommonRes]()
在响应中,我收到了monthName的重复值。我想通过删除重复项来列出这些常见monthName的列表。因此,从issue开始,我尝试了以下
self.monthList = Array(Set(res.filter({ (i : CommonRes) in res.filter({ $0.monthName == i.monthName }).count > 1 })))
但是我收到一个错误
对成员“过滤器”的含糊不清
答案 0 :(得分:2)
您可以尝试一下。
let monthList = Set(res.compactMap( {$0.monthName} )).sorted()
如果要保留数据源的顺序,则可以使用NSOrderedSet
。
let monthListOrdered = NSOrderedSet(array: res.compactMap( {$0.monthName})).array as! [String]
但是,如果希望月份按其在日历上的显示顺序,则需要将它们排序为日期。
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM"
let monthList = Set(res.compactMap( {$0.monthName}))
let sortedMonthList = monthList.sorted(by: { dateFormatter.date(from: $0)! < dateFormatter.date(from: $1)! })
重要说明:已完成强制展开,因为从数据源中可以明显看出,您只会收到有效的月份。