我有一本字典。它的键是字符串,其值是NSDates。例如:
{ A : <jan 1>, B : <mar 1>, C : <feb 1> }
我想从字典(A,B和C)中的键创建一个数组,按日期排序。所以我应该得到以下数组:
[A, C, B]
我怎样才能做到这一点?
奖励积分:使用这个排序的数组,我可以完成我的最终目标,但排序的数组只是一个中间人;最优雅的解决方案不需要它。我真正想要做的是对一个对象数组进行排序,每个对象都有一个属性值,对应于字典中的一个键。例如:
[obj1, obj2, obj3]
,其中
obj1.prop = A
obj2.prop = B
obj3.prop = C
我想根据A,B和&amp;的日期值对该数组进行排序。 C,引用字典。所以我在这种情况下的最终目标是以下数组:
[obj1, obj3, obj2]
谢谢!
答案 0 :(得分:4)
在David的回答的基础上,这将解决所有问题:
NSDictionary* items = @{ @"A":date1, @"B":date2, @"C":date3 };
NSArray *objectsArray = @{ obj1, obj2, obj3 };
NSArray *sortedObjectsArray = [objectsArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSDate *date1 = [items objectForKey:obj1.prop];
NSDate *date2 = [items objectForKey:obj2.prop];
return [date1 compare:date2];
}];
答案 1 :(得分:2)
以下内容将实现您的第一个目标:
NSDictionary* items = @{ @"A":@2, @"B":@1, @"C":@3};
keys = [[items allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [items[obj1] compare:items[obj2]];
}];
由此你应该能够推断出你的其他问题的答案。
答案 2 :(得分:0)
这应该完成你的第二个问题
NSSortDescriptor *sortDescrip = [[NSSortDescriptor alloc] initWithKey:@"prop"
ascending:YES];
NSArray *sortDescrips = [NSArray arrayWithObject:sortDescrip];
NSArray *sortedArray = [originalArray sortedArrayUsingDescriptors:sortDescrips];