2017-08-17 73 views
1

我正在處理Swift 3中的一個項目,其中我有一個具有重複值的元組數組有沒有辦法將其保存到NSSet或避免複製相同的值。我的元組數組的結構如下。在元組數組中刪除重複的值

var selectedSongList : [(title: String, healerName: String, trackUrl: String, trackID: String, imageUrl: String)] = [] 

因此後來我用這poplate我的UITableView

+0

看看這個:https://stackoverflow.com/questions/25738817/removing-duplicate-elements-from-an-array –

+0

的代碼片段將非常感激 – danu

+1

做出符合equatable –

回答

1

有兩種方法可以做到它。

解決方案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

從您的數組中創建一個集合,然後將其返回到數組。

0

編輯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 
    } 
}