gpt4 book ai didi

ios - Swift:根据唯一值合并数组中的 2 个或更多元素自定义对象

转载 作者:行者123 更新时间:2023-11-28 12:22:06 25 4
gpt4 key购买 nike

下面是我的自定义对象类。

class UserGroups: NSObject {
let groupName: String
let users: [CheckIn]?

init(json:JSON) {
self.groupName = json[Constants.Models.UserGroups.groupName].stringValue
self.users = UserGroups.getUserGroupsList(jsonArray: json[Constants.Models.UserGroups.users].arrayValue)
}

class func getUserGroupsList(jsonArray: [JSON]) -> [CheckIn]{
return jsonArray.flatMap({ (jsonItem: JSON) -> CheckIn in
return CheckIn(json: jsonItem)
})
}
}

我有一组上述自定义对象。我如何通过合并具有相同 groupName 的每个对象的 users 将 2 个或多个自定义对象组合成一个对象。

下面是我的 CheckIn 模型:

类 CheckIn: NSObject {

let id: String
let firstName: String
let lastName: String
let latitude: String
let longitude: String
let hint: String

init(json: JSON) {
self.id = json[Constants.Models.CheckIn.id].stringValue
self.firstName = json[Constants.Models.CheckIn.firstName].stringValue
self.lastName = json[Constants.Models.CheckIn.lastName].stringValue
self.hint = json[Constants.Models.CheckIn.hint].stringValue
self.latitude = json["location"][Constants.Models.CheckIn.latitude].stringValue
self.longitude = json["location"][Constants.Models.CheckIn.longitude].stringValue
}

id 字段在 CheckIn 中不是唯一的。

最佳答案

这是一个稍微简化的示例,展示了如何组合具有相同组名的组。

这是 UserGroup 类。 users 现在是一个变量 (var),因为我们将向组中添加元素以组合它们。

class UserGroups: NSObject {
let groupName: String
var users: [String]?

init(groupName: String, users: [String]?) {
self.groupName = groupName
self.users = users
}
}

这里有三个组,其中两个共享相同的组名,Blues

let group1 = UserGroups(groupName: "Blues", users: ["Tom", "Huck", "Jim"])
let group2 = UserGroups(groupName: "Reds", users: ["Jo", "Ben", "Tommy"])
let group3 = UserGroups(groupName: "Blues", users: ["Polly", "Watson", "Douglas"])

接下来,我们将把所有的组放在一个数组中。

let allGroups = [group1, group2, group3]

在这里,我们使用 Swift 的 reduce函数允许我们将数组缩减为仅具有唯一组名称的组。

let compacted = allGroups.reduce([UserGroups](), { partialResult, group in

var dupe = partialResult.filter {$0.groupName == group.groupName }.first
if let dupeGroup = dupe {
dupeGroup.users?.append(contentsOf: group.users ?? [])
return partialResult
} else {
var newPartialResult = partialResult
newPartialResult.append(group)
return newPartialResult
}
})

数组现在被缩减为唯一的组,我们在 Swift 的 map 的帮助下打印出所有组及其用户。功能。

print(compacted.map { $0.users })

// Prints [
Optional(["Tom", "Huck", "Jim", "Polly", "Watson", "Douglas"]),
Optional(["Jo", "Ben", "Tommy"])
]

关于ios - Swift:根据唯一值合并数组中的 2 个或更多元素自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44501262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com