ios - 从自定义对象数组 Swift 中删除重复项

标签 ios arrays swift duplicates nsobject

我有一个定义如下的自定义类:

class DisplayMessage : NSObject {
var id : String?
var partner_image : UIImage?
var partner_name : String?
var last_message : String?
var date : NSDate?
}

现在我有一个数组 myChats = [DisplayMessage]?id 字段对于每个 DisplayMessage 对象都是唯一的。我需要检查我的数组并从中删除所有重复项,基本上确保数组中的所有对象都具有唯一的 id。我已经看到一些使用 NSMutableArrayEquatable 的解决方案,但是我不确定如何在此处调整它们;我也知道 Array(Set(myChats)) 但这似乎不适用于自定义对象数组。

最佳答案

这是一个数组扩展,用于返回基于给定键的唯一对象列表:

extension Array {
    func unique<T:Hashable>(map: ((Element) -> (T)))  -> [Element] {
        var set = Set<T>() //the unique list kept in a Set for fast retrieval
        var arrayOrdered = [Element]() //keeping the unique list of elements but ordered
        for value in self {
            if !set.contains(map(value)) {
                set.insert(map(value))
                arrayOrdered.append(value)
            }
        }

        return arrayOrdered
    }
}

对于你的例子做:

let uniqueMessages = messages.unique{$0.id ?? ""}

关于ios - 从自定义对象数组 Swift 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39307188/

相关文章:

iphone - 如何从UIAlertView运行方法

Swift 忘记对象是一种类型

Swift 5 : String. UTF16View.Index(encodedOffset: l) 弃用

ios - NSPredicate 在 NSFetchRequest 中等于 nil

ios - X 轴的 Google Live 图形值按降序排列

objective-c - 如何从 NSHomeDirectory 加载图像

ios - 停止删除 TextView 中的默认文本(Swift)

php - 将项目添加到数组

arrays - 将一个数组中的对象随机替换到另一个数组中。 swift 4

java - 如何返回 <T extends Comparable< 的通用数组? Java 中的 super T>>?