根据第二个数组对 NSManagedObjects 数组进行排序
Sort array of NSManagedObjects based on second array
我正在尝试根据与每个数组关联的值对 NSManagedObject
数组进行排序。这些值的计算成本很高,所以我想最多计算一次。类似问题的大多数解决方案都涉及构建 NSDictionary
但我的对象不(必然)符合 NSCopying
协议。我考虑过使用对象 ID,但是否有 cleaner/simpler 解决方案?这个方法有什么问题吗?
- 在
NSManagedObject
子类中创建一个方便的方法来计算您需要排序的值并将 return 它。对其进行编码,使其只计算一次值。
- 按方便的方法排序。
更新到 OP
Can you elaborate on how you do 1. ? Should I use NSCache ? Thanks
你子类 NSManagedObject
:
@interface MySubclass: NSManagedObject
@property NSString *myCalculatedSortValue;
- (NSString*)calculatedSortValue;
@end
然后你以懒惰的方式实现它:
@implementation MySubclass
- (NSString*)calculatedSortValue
{
if (myCalculatedSortValue) return myCalculatedSortValue;
//calculate value
return myCalculatedSortValue;
}
然后您可以按 calculatedSortValue
排序,每个生命周期只会计算一次。
注意: 这仅在 NSManagedObject
实例从商店中获取后才有效。这不会直接对商店起作用,因为所有计算都发生在 object-space.
中
我找到了一个非常简单的解决方法来解决我的问题。我可以只创建一个字典,其键是我的对象在其数组中的索引,其关联值是与对象关联的值。我按值对字典进行排序,然后按键给定的顺序检索对象。
我正在尝试根据与每个数组关联的值对 NSManagedObject
数组进行排序。这些值的计算成本很高,所以我想最多计算一次。类似问题的大多数解决方案都涉及构建 NSDictionary
但我的对象不(必然)符合 NSCopying
协议。我考虑过使用对象 ID,但是否有 cleaner/simpler 解决方案?这个方法有什么问题吗?
- 在
NSManagedObject
子类中创建一个方便的方法来计算您需要排序的值并将 return 它。对其进行编码,使其只计算一次值。 - 按方便的方法排序。
更新到 OP
Can you elaborate on how you do 1. ? Should I use NSCache ? Thanks
你子类 NSManagedObject
:
@interface MySubclass: NSManagedObject
@property NSString *myCalculatedSortValue;
- (NSString*)calculatedSortValue;
@end
然后你以懒惰的方式实现它:
@implementation MySubclass
- (NSString*)calculatedSortValue
{
if (myCalculatedSortValue) return myCalculatedSortValue;
//calculate value
return myCalculatedSortValue;
}
然后您可以按 calculatedSortValue
排序,每个生命周期只会计算一次。
注意: 这仅在 NSManagedObject
实例从商店中获取后才有效。这不会直接对商店起作用,因为所有计算都发生在 object-space.
我找到了一个非常简单的解决方法来解决我的问题。我可以只创建一个字典,其键是我的对象在其数组中的索引,其关联值是与对象关联的值。我按值对字典进行排序,然后按键给定的顺序检索对象。