arrays - 使用 Swift 查找数组中的重复元素

标签 arrays swift ios8 addressbook

如何查找数组中的重复元素?我有一组电话号码,所以在电话号码中我应该开始从右侧到左侧搜索并找到相似的 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/

相关文章:

ios - 未调用 UIImagePickerControllerDelegate

google-analytics - Firebase 尝试加载 http,但被 App Transport Security 阻止

ios - SCNNode.position 静态?

java - 将项目添加到有序集中的数组的问题

arrays - 查找数组的顶部和底部 5 个元素

ios - Swift:委托(delegate)/事件来自 C# 背景

ios - 如何在使用 swift 切换不同 View 的同时连续播放背景音乐?

c++ - 将宽字符串或宽字符数组转换为简单字符数组的最简单方法?

php - 需要一个 PHP 数组问题的简单解决方案吗?

swift - 如何从 Swift textView 获取文本?