我正在處理Swift 3中的一個項目,其中我有一個具有重複值的元組數組有沒有辦法將其保存到NSSet或避免複製相同的值。我的元組數組的結構如下。在元組數組中刪除重複的值
var selectedSongList : [(title: String, healerName: String, trackUrl: String, trackID: String, imageUrl: String)] = []
因此後來我用這poplate我的UITableView
我正在處理Swift 3中的一個項目,其中我有一個具有重複值的元組數組有沒有辦法將其保存到NSSet或避免複製相同的值。我的元組數組的結構如下。在元組數組中刪除重複的值
var selectedSongList : [(title: String, healerName: String, trackUrl: String, trackID: String, imageUrl: String)] = []
因此後來我用這poplate我的UITableView
有兩種方法可以做到它。
解決方案1
您可以創建一個結構,它應該確認到可哈希和equatable一些這樣的事
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
從您的數組中創建一個集合,然後將其返回到數組。
編輯FUNC static 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
}
}
看看這個:https://stackoverflow.com/questions/25738817/removing-duplicate-elements-from-an-array –
的代碼片段將非常感激 – danu
做出符合equatable –