我正在研究Swift 3中的一个项目,我有一个带有重复值的元组数组,有没有办法将它保存到NSSet或避免复制相同的值。我的元组数组的结构如下。
var selectedSongList : [(title: String, healerName: String, trackUrl: String, trackID: String, imageUrl: String)] = []
因此后来我用它来弹出我的UITableView
答案 0 :(得分:1)
有两种方法可以做到。
解决方案1
你可以创建一个结构,它应该确认Hashable和equable这样的东西
struct Post: Hashable, Equatable {
let id: String
var hashValue: Int { get { return id.hashValue } }
}
func ==(left:Post, right:Post) -> Bool {
return left.id == right.id
}
并删除您的对象,您可以这样做
let uniquePosts = Array(Set(posts))
解决方案2
从数组中创建一个集合,然后将其恢复为数组。
答案 1 :(得分:0)
如果您对同一首歌有不同的定义,请在static func ==
结构中编辑func Song
struct Song: Equatable {
var title: String?
var healerName: String?
var trackUrl:String?
var trackID:String?
var imageUrl: String?
init(_ title: String, _ healerName:String, _ trackUrl:String, _ trackID:String,_ imageUrl: String) {
self.title = title
self.healerName = healerName
self.trackUrl = trackUrl
self.trackID = trackID
self.imageUrl = imageUrl
}
static func == (lhs: Song, rhs: Song) -> Bool {
return lhs.title == rhs.title &&
lhs.healerName == rhs.healerName &&
lhs.trackUrl == rhs.trackUrl &&
lhs.trackID == rhs.trackID &&
lhs.imageUrl == rhs.imageUrl
}
}
extension Array where Element:Equatable {
func removeDuplicates() -> [Element] {
var result = [Element]()
for value in self {
if result.contains(value) == false {
result.append(value)
}
}
return result
}
}