如何查找数组中的重复元素?我有一组电话号码,所以在电话号码中我应该开始从右侧到左侧搜索并找到相似的 6 个整数。然后我应该把它们打印出来。
最佳答案
要查找重复项,您可以按电话号码构建交叉引用,然后将其过滤为仅重复项。例如,考虑:
let contacts = [
Contact(name: "Rob", phone: "555-1111"),
Contact(name: "Richard", phone: "555-2222"),
Contact(name: "Rachel", phone: "555-1111"),
Contact(name: "Loren", phone: "555-2222"),
Contact(name: "Mary", phone: "555-3333"),
Contact(name: "Susie", phone: "555-2222")
]
您可以使用以下方法构建交叉引用字典:
let crossReference = Dictionary(grouping: contacts, by: \.phone)
然后,找到重复项:
let duplicates = crossReference
.filter { $1.count > 1 }
显然可以使用对您有意义的任何模型类型,但上面使用了以下 Contact
类型:
struct Contact {
let name: String
let phone: String
}
有很多很多方法可以实现这个,所以我不会关注上面的实现细节,而是关注这个概念:通过一些键(例如电话号码)构建交叉引用原始数组,然后将结果过滤到只是那些具有重复值的键。
听起来您想将反射(reflect)重复项的结构扁平化为一个联系人数组(我不确定您为什么要这样做,因为您丢失了识别哪些是彼此重复的结构), 但如果你想这样做,你可以 flatMap
它:
let flattenedDuplicates = crossReference
.filter { $1.count > 1 } // filter down to only those with multiple contacts
.flatMap { $0.1 } // flatten it down to just array of contacts that are duplicates of something else
关于arrays - 使用 Swift 查找数组中的重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29727618/