按属性值查找对象索引

Posted

技术标签:

【中文标题】按属性值查找对象索引【英文标题】:Find object index by a property value 【发布时间】:2013-06-01 04:37:54 【问题描述】:

ios6 coredata 上,我正在尝试构建一个类似于幻灯片的应用程序(按照特定顺序逐个遍历 db 实体)。这很容易,我什至可以使用 NSFetchedResultsController。现在,问题是,在某些情况下,我会得到一个实体,我需要在不知道该实体索引的情况下“跳转”到该实体。

一种可能的解决方案是逐个遍历实体。我只是想知道是否有另一种方法来获取该实体的“索引”。这是描述该问题的伪代码:

NSFetchRequest

已排序的实体:所需的实体类型,按上次更新日期排序 ** 需要通过实体ID或唯一ID找出上述实体列表中的索引。

在 SQL 中,我会做类似的事情

select ROWINDEX
from (
   select ROWNUM as ROWINDEX, uid
   from entity_table
   order by lastupdatedate desc
)
where uid="abc"

谢谢。

【问题讨论】:

【参考方案1】:

我可能没有完全理解你。然而。 FetchedResultsController 有一个属性 .fetchedObjects ,它是一个数组。我认为您可以轻松地在该阵列中移动以做任何您需要做的事情。

你没有表明你想如何识别你所追求的实体;您当然可以按照您的建议使用蛮力方法来找到您要查找的任何内容:

for (NSManagedObject *obj in fetchedResultsController.fetchedObjects)



如果结果集很小。如果结果集太大而无法有效完成,您可以尝试使用 NSPredicate 过滤 fetchedObjects 数组,这可能会更好。请参阅Using NSPredicate with Core Data NSFetchedResultsController的链接

【讨论】:

好的。谢谢。正则表达式。这对我有用。由于我是 CoreData 的新手,所以只想确保我没有遗漏任何内容。 NSFetchedResultsController 还有一个方法indexPathForObject: 可能在这里有用。 马丁,你是对的!我现在使用这种方法。还没有测试过。但这看起来正是我想要的。谢谢。【参考方案2】:

假设您有一个包含所有已排序对象的数组,您可以通过以下方式找到索引

NSArray *objects = ...//Sorted Array
NSPredicate *predicate  = [NSPredicate predicateWithFormat:@"uid=='abc'"];
NSUInteger index = [objects indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) 
    return [predicate evaluateWithObject:obj];
];

【讨论】:

以上是关于按属性值查找对象索引的主要内容,如果未能解决你的问题,请参考以下文章

在Python中按属性获取对象列表中的索引

按对象属性搜索对象向量

在对象数组中,查找属性与搜索匹配的对象的索引的最快方法

Neo4j学习笔记——数据索引

在具有特定键的特定值的数组中查找对象的索引[重复]

javascript 如何在javascript数组中按键和值查找对象的索引