跳转至

Map字典

数据分组

有一个列表List,里面字段1的值相同的为一组。字段1为key,value为字段1的值相同的列表。

  • 遍历List
  • 如果Map里面key为字段1的value不存在,则创建key为字段1的value为空数组
  • key为字段1的value数组添加item

查找是否有重复数据值并获取重复值的下标

使用字典,key:数据属性值,value:数据在数组中的下标。

从字典中根据key取value,如果value有值则有重复的数据。可以得到重复的值的下标:当前下标和value(上一个下标)。

示例:多单位换算比例不能重复,要求检测单位的换算比例中是否存在重复,并返回重复项的下标,若无重复返回特殊标记。

复杂度

  • 时间:O(n)
  • 空间:O(n)
import Foundation

func findFirstDuplicateRateInObjects(_ objects: [[String: Any]], key: String = "count") -> (Int, Int)? {
    var seen: [String: Int] = [:]
    for (i, obj) in objects.enumerated() {
        //忽略空字符串
        if let r = obj[key] as? String, !r.isEmpty {
            if let first = seen[r] {
                return (first + 1, i + 1)
            }
            seen[r] = i
        }
    }
    return nil
}

// 使用示例
// key是数据的值:2.0,3.0,2.0 value是下标:2,3,4
let objects: [[String: Any]] = [
    ["name": "A", "count": ""],
    ["name": "B", "count": "2.0"],
    ["name": "C", "count": "3.0"],
    ["name": "D", "count": "2.0"]
]
if let dupObj = findFirstDuplicateRateInObjects(objects) {
    print("objects 重复:辅助单位\(dupObj.0) 和 辅助单位\(dupObj.1)")//输出下标2和4
} else {
    print("objects NO DUPLICATE")
}