ios - 字符串数组除外时使用 LazyMapSequence
问题描述
我有一个用户对象
@objc(User)
public class User: NSManagedObject {
@NSManaged public var firstname: String
@NSManaged public var lastname: String
@NSManaged public var country: String
@NSManaged public var friends: NSSet // of User objects
var full: String {
firstname + " " + lastname
}
var friendsArray: [User] {
friends.allObjects as? [User] ?? []
}
}
在某个时候,我想将大量用户(80k 对象)映射到视图模型数组
struct ItemViewModel: Hashable {
let id: UUID
let friendsName: [String]
}
没有lazy需要很长时间,所以我选择了lazy的用法:
func prepareViewModel(users: [User]) -> [ItemViewModel] {
users.map { user in
let friendsName = user.friendsArray.lazy.filter{["en", "fr"].contains($0.country)}.map(\.full)
return ItemViewModel(id: UUID(), friendsName: friendsName)
}
}
但我收到一个错误:
Cannot convert value of type 'LazyMapSequence<LazyFilterSequence<LazySequence<[User]>.Elements>.Elements, String>'
(aka 'LazyMapSequence<LazyFilterSequence<Array<User>>, String>') to expected argument type '[String]'
这是有道理的,因为现在朋友姓名数组将在以后延迟处理。我试图将视图模型结构转换为:
struct ItemViewModel: Hashable {
let id: UUID
let friendsName: LazyMapSequence<LazyFilterSequence<[User]>, String>
}
但是现在没有Hashable
办法Hashable
在使用LazyMapSequence<LazyFilterSequence<[User]>, String>
as 类型时保持自动一致性ItemViewModel
以及有关如何提高逻辑性能的任何提示
解决方案
推荐阅读
- flutter - Flutter:使用小部件中另一个文件中的函数
- python - 如何在 srt 文件和 csv 文件之间进行转换?
- r - 数据格式化问题 (biomod2)
- python - python中的Docker采样测量
- c++ - 为什么将新结构放入重新分配的 c-array 崩溃程序?
- apache-kafka - Kafka 事务 - 为什么我需要复制?
- javascript - 在 JavaScript 数组中组合重复键的值
- c# - 使用此代码,我将能够在客户端计算机上访问文件夹 AppData
- python - 如何用硒检测python中的变量是否发生了变化?
- c++ - 如何在 C++ 中检查谓词是否为真?