如何添加唯一值以区分 Swift 数组中的重复数据?

How to add a unique value to differentiate between duplicate data in a Swift array?

有人能为我指出正确的方向来解决这个问题吗?

我正在使用以下结构中的值创建 table 个单元格。单元格已创建,数据在创建时显示在单元格中,效果很好。

问题是一些单元格具有相同的名称,我从结构数据中为每个单元格分配了一个单独的 ID,但我需要用户知道在重复项中首先创建了哪个重复项。有点像子号。

例如:1:apple -1 , 2:pear -1, 3:apple -2

1(在所有单元格中的位置)- Apple(单元格的名称)- 1(基于有多少个单元格被命名为 apple 的值)

我创建的 func idName() 告诉我们一个名字出现了多少次,但我如何分解它以便数据像上面那样显示?

 struct Data {
    var id: Int
     var name: String
    var color: String
    var time: TimeInterval
    var sessionId: Int
    var userId: Int
}

func idName () {
        let idElement = elements //another variable is used to grab the Array
        var counts: [String: Int] = [:]
        var idValue: Int

        for id in idElement {

            counts[id.name] = (counts[id.name] ?? 0) + 1
            for (key, value) in counts {
                print("\(key) occurs \(value) time(s)")

            }
        }
    }

"I need the user to know which one of the duplicates was created first."

如何在每个项目创建时为其添加日期?

var date: Date = Date()

所以你可以对它们进行排序...

myObjects = myObjects.sorted(by: {
    [=11=].date.compare(.date) == .orderedDescending
})

另一种方法是添加一个UUID,这将为您提供一个唯一的标识符供参考:

var uuid: UUID = UUID()

var someObjectID = myObject.uuid.uuidString

更新:

创建元素(您的数据结构)时,您应该在添加一个相同名称的元素之前检查您的元素数组,如果存在一个相同名称的元素,那么您可以递增一个未存储为属性 结构。

您可以使用 mapDictionary(_:uniquingKeysWith:)

到return映射元素数组(数据结构数组)。

let mappedElements = elements.map([=13=].name, 1)

然后,计算重复项并创建一个包含匹配项目数的字典。

let counts = Dictionary(mappedElements, uniquingKeysWith: +)

这将导致 ["apple": 3, "pear": 2, "peach": 1]

我刚刚在数据中添加了 nameCounter 属性,这将指示特定名称的出现。像这样-

struct Data1 {
    var id: Int
    var name: String
    var nameCOunter: Int? = 1

    init(id: Int, name: String) {
        self.id = id
        self.name = name
    }

    static func addTestData() ->[Data1] {
        var arr = [Data1]()
        let model = Data1(id: 1, name: "apple")
        let model1 = Data1(id: 2, name: "peer")
        let model2 = Data1(id: 3, name: "apple")
        let model3 = Data1(id: 4, name: "orange")
        let model4 = Data1(id: 5, name: "grape")
        let model5 = Data1(id: 6, name: "peer")
        let model6 = Data1(id: 7, name: "apple")

        arr = [model,model1,model2,model3,model4,model5,model6]
        return arr
    }
}

func idName() {
    let idElement = Data1.addTestData()
    var countedElement = [Data1]()
    var nameArr = [String]()
    for var dataModel in idElement {
        nameArr.append(dataModel.name)
        let count = nameArr.filter{[=10=] == dataModel.name}.count
        dataModel.nameCOunter = count
        countedElement.append(dataModel)
    }
    print(countedElement)
}