2016-01-24 3 views
2

У меня есть массив структур (структура не имеет ничего в нем по строкам, поэтому, я думаю, я мог бы использовать массив массивов строк, но я думал, что мне захочется добавить некоторые нестроковые элементы позже).Swift 2.1: Удаление дубликатов из массива структур?

struct ensRow { 
     var adLastName: String = "" 
     var adMaidenName: String = "" 
     var adFirstName: String = "" 
     var adAge: String = "" 
     var adLocation: String = "" 
     var adDeathDate: String = "" 
     var adPubDate: String = "" 
     var adPubDate2: String = "" 
     var adPubDate3: String = "" 
     var adObitDate: String = "" 
     var adObitDate2: String = "" 
     var adObitDate3: String = "" 
     var adSource: String = "" 
     var adSection: String = "" 
     var adPage: String = "" 
     var adPhotoAvailable: String = "" 
     var adUDF1: String = "" 
     var adUDF2: String = "" 
     var adUDF3: String = "" 
     var adNotes: String = "" 
     var adFrom: String = "" 
    } 
    var ensArray: [ensRow] = [] 

Мне нужно удалить дубликаты эффективно либо по мере заполнения массива, либо после его заполнения. Я думал, может быть, я могу настроить его как набор объектов, если я могу сделать их хешируемыми (не уверен, как) и если есть условный способ добавления членов в набор. Однако в идеале я хотел бы, чтобы последнее свойство (adFrom) было переменным, сохраняя при этом все структуры с дубликатами во всех других свойствах. Любые предложения о том, как лучше всего это сделать? Благодаря!

+1

относящиеся к созданию ваших структур hashable: http://stackoverflow.com/a/32953118/2227743 – Moritz

+0

Отлично! Это работает. Благодарю. –

ответ

0

Это похоже на работу - вид грубой силы и довольно медленно, но ...

struct ensRow:Equatable { 
    var adLastName: String = "" 
    var adMaidenName: String = "" 
    var adFirstName: String = "" 
    var adAge: String = "" 
    var adLocation: String = "" 
    var adDeathDate: String = "" 
    var adPubDate: String = "" 
    var adPubDate2: String = "" 
    var adPubDate3: String = "" 
    var adObitDate: String = "" 
    var adObitDate2: String = "" 
    var adObitDate3: String = "" 
    var adSource: String = "" 
    var adSection: String = "" 
    var adPage: String = "" 
    var adPhotoAvailable: String = "" 
    var adUDF1: String = "" 
    var adUDF2: String = "" 
    var adUDF3: String = "" 
    var adNotes: String = "" 
    var adFrom: String = "" 
} 

func ==(lhs: ensRow, rhs: ensRow) -> Bool { 
    if lhs.adLastName != rhs.adLastName { 
     return false 
    } 
    return lhs.adLastName == rhs.adLastName 
     && lhs.adMaidenName == rhs.adMaidenName 
     && lhs.adFirstName == rhs.adFirstName 
     && lhs.adAge == rhs.adAge 
     && lhs.adLocation == rhs.adLocation 
     && lhs.adDeathDate == rhs.adDeathDate 
     && lhs.adPubDate == rhs.adPubDate 
     && lhs.adPubDate2 == rhs.adPubDate2 
     && lhs.adPubDate3 == rhs.adPubDate3 
     && lhs.adObitDate == rhs.adObitDate 
     && lhs.adObitDate2 == rhs.adObitDate2 
     && lhs.adObitDate3 == rhs.adObitDate3 
     && lhs.adSource == rhs.adSource 
     && lhs.adSection == rhs.adSection 
     && lhs.adPage == rhs.adPage 
     && lhs.adPhotoAvailable == rhs.adPhotoAvailable 
     && lhs.adUDF1 == rhs.adUDF1 
     && lhs.adUDF2 == rhs.adUDF2 
     && lhs.adUDF3 == rhs.adUDF3 
     && lhs.adNotes == rhs.adNotes 
}