gpt4 book ai didi

swift - 如何用一个公共(public)变量对两个结构进行排序

转载 作者:搜寻专家 更新时间:2023-11-01 05:51:44 28 4
gpt4 key购买 nike

我在 Swift 中有两个这样的结构:

struct Friend {
id: Int
name: String
biography: String
profilePicURL: String
}

struct ProfileViews {
id: Int
views: Int
}

我正在尝试根据个人资料 ([ProfileViews]) 的查看量对一组好友 ([Friend]) 进行排序。我如何根据两个结构中相同的 id 执行此操作?问题是,有时两个结构都不匹配。例如,某个 friend 可能还没有 ProfileViews。例如:

Friend(id: 1, name: "PennyWise", biography: "Lorem ipsum", "test.jpg")
Friend(id: 2, name: "Bob", biography: "Dolar sit amet", "test2.jpg")
Friend(id: 3, name: "Dylan", biography: "Yes we can!", "test3.jpg")

ProfileViews(id: 1, views: 23)
ProfileViews(id: 3, views: 12)

然后我想根据 View 对 [Friend] 数组进行排序,因此 id 1、id 3、id 2。我该怎么做?我知道 sorted(by:) 函数,但我似乎只能在 [Friend] 数组中执行此操作。但是,我想使用其他结构中的变量。

最佳答案

最简单的解决方案是将 ProfileViews 值作为 Friend 的属性,或者甚至将配置文件 View 作为 Int Friend 上的属性。

如果这不可能,那么最简单的解决方案就是创建一个个人资料 View 字典并即时查找它们。

// Create a dictionary that maps from user ids to ProfileViews:
let viewIndex = Dictionary(
profileViews.map { views in
// views.id will be the key, views will be the value
(views.id, views)
}
// If two views values exist with the same user ID, they will be added together
uniquingKeysWith: { views1, views2 -> ProfileViews in
ProfileViews(id: views1.id, views: views1.views + views2.views)
}
)
// Sort friends by looking up the views in the viewIndex
let sortedFriends = friends.sorted(by: { friend1, friend2 -> Bool in
(viewIndex[friend1.id]?.views ?? 0) < (viewIndex[friend2.id]?.views ?? 0)
})

关于swift - 如何用一个公共(public)变量对两个结构进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56092675/

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