我想对核心数据NSSet的数据进行排序(我知道我们只能用数组做,但让我解释一下......)。我有一个实体用户与实体配方有很多关系。配方具有属性名称和ID。 我想获得这样的数据:
NSArray *id = [[user.recipes valueForKey:@"identity"] allObjects];
NSArray *name = [[user.recipes valueForKey:@"name"] allObjects];
如果我在两个数组中的索引1处获取对象,它们对应于相同的配方......
由于
答案 0 :(得分:40)
您需要先对食谱进行排序:
NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]];
NSArray *sortedRecipes = [[recipes allObjects] sortedArrayUsingDescriptors:sortDescriptors];
然后,您可以从已排序的配方数组中提取属性数组,结果将按排序顺序保留:
NSArray *sortedNames = [sortedRecipes valueForKey:@"name"];
NSArray *sortedIdentities = [sortedRecipes valueForKey:@"identity"];
答案 1 :(得分:7)
如果您希望它们的顺序相同,则需要在提取值之前对它们进行排序。例如:
NSArray * sortedRecipes = [user.recipes sortedArrayUsingDescriptors:arrayOfSortDescriptors];
NSArray * identities = [sortedRecipes valueForKey:@"identity"];
NSArray * names = [sortedRecipes valueForKey:@"name"];
修改强>
道歉。我刚刚意识到这是一个iPhone问题,NSSet
在iPhone上没有sortedArrayUsingDescriptors:
。但是,解决这个问题很简单:
NSArray * recipes = [user.recipes allObjects];
NSArray * sortedRecipes = [recipes sortedArrayUsingDescriptors:arrayOfSortDescriptors];
....