gpt4 book ai didi

ios - 从 CoreData 的不同属性中获取前 1

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:56:42 25 4
gpt4 key购买 nike

您好,我有一个格式如下所示的表格。

我想建立一个历史 View ,所以我需要来自不同用户的最后消息,按时间戳排序!


+---+-----------------+-----------------+----- ----------+
| |用户名 |留言 |时间戳 |
+---+-----------------+-----------------+----- ----------+
| 1 |约翰 |你好 | 486380161.723 |
| 2 |标记 |电子表格 | 486380264.723 |
| 3 |约翰 |仅供引用486380366.723 |
| 4 |约翰 |再见 | 486557497.271 |
| 5 |标记 |你好吗? | 486557597.274 |
| 6 |马里奥 |什么? | 486558597.274 |
+---+-----------------+-----------------+----- ----------+

这就是我的结果。


+---+-----------------+-----------------+----- ----------+
| |用户名 |留言 |时间戳 |
+---+-----------------+-----------------+----- ----------+
| 6 |马里奥 |什么? | 486558597.274 |
| 5 |标记 |你好吗? | 486557597.274 |
| 4 |约翰 |再见 | 486557497.271 |
+---+-----------------+-----------------+----- ----------+

现在,我得到了所有不同的用户名,迭代每个并查询该用户名的消息,按时间戳排序,limit(1)

我对这个解决方案不满意,所以任何人都可以帮助我找到更好的解决方案吗?

谢谢,马里奥

最佳答案

可以在两次获取中完成,但有一点我会在谈到它时提及。

第一次获取获取用户名和每个用户名的最新时间戳:

    let maxTimestampRequest = NSFetchRequest(entityName: "Entity")
maxTimestampRequest.resultType = .DictionaryResultType

let maxTimestampExpression = NSExpression(format: "max:(timestamp)")
let maxTimestampExpressiondescription = NSExpressionDescription()
maxTimestampExpressiondescription.name = "maxTimestamp"
maxTimestampExpressiondescription.expression = maxTimestampExpression
maxTimestampExpressiondescription.expressionResultType = .DoubleAttributeType

maxTimestampRequest.propertiesToFetch = ["username", maxTimestampExpressiondescription]
maxTimestampRequest.propertiesToGroupBy = ["username"]

执行该提取,您将获得一个字典数组。每个字典都包含一个用户名和该用户名的最新时间戳:

Optional([{
maxTimestamp = "486557497.271";
username = John;
}, {
maxTimestamp = "486558597.274";
username = Mario;
}, {
maxTimestamp = "486557597.274";
username = Mark;
}])

获取完整记录需要二次获取。如果之前获取的结果在一个名为 results 的数组中,

    var predicates = [NSPredicate]()
for maxTimestampInfo in results! {
let username = maxTimestampInfo["username"]!
let timestamp = maxTimestampInfo["maxTimestamp"]!
let partialPredicate = NSPredicate(format: "username=%@ and timestamp=%@", argumentArray:[ username, timestamp ])
predicates.append(partialPredicate)
}
let completePredicate = NSCompoundPredicate(orPredicateWithSubpredicates: predicates)

let fetch = NSFetchRequest(entityName: "Entity")
fetch.predicate = completePredicate

执行 提取,您将获得符合您要求的完整托管对象。

需要注意的是,第二次提取中的谓词可能非常大,具体取决于您拥有的用户数量。

关于ios - 从 CoreData 的不同属性中获取前 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37730879/

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