我有一个NSDictionary。它有钥匙和物品。
为简单起见,键是问号,对象是计算答案分数。
现在,我之前是如何做到的,因为我将答案分数设置为键,将问题编号设置为对象。通过这种方式,我可以从字典中获取allKeys的数组,对其进行排序,然后执行类似的操作:
for(NSString *string in tempArray){
NSLog(@"%@",[dictionary objectForKey:string]);
}
我现在遇到的(愚蠢的 - 我)问题是(显然...... duuhhh)键需要唯一,因此当计算的答案分数相同时,只输出一个答案!
我需要一个解决方案。在PHP中,您可以multisort
个数组。我想知道在objective-c中是否有类似的解决方案,或者确实有人有更好的答案?
非常感谢任何帮助。
谢谢。
答案 0 :(得分:8)
您知道NSDictionary的allKeys
,allValues
和allKeysForObject
方法吗?
答案 1 :(得分:2)
一种解决方案是使用仅包含两个键值对的字典数组来存储答案分数。一个关键是问题编号(或者您的问题被标记,即“Q1.1”),而另一个关键是实际的答案分数。例如:
static NSString * const QuestionKey = @"questionNumber";
static NSString * const AnswerScoreKey = @"answerScore";
NSMutableArray *allAnswers = [NSMutableArray array];
for (int i = 0; i < 20; i++)
{
// fill allAnswers array with random data
NSDictionary *answer = [NSDictionary dictionaryWithObjectsForKeys:
[NSString stringWithFormat:@"Q%d", i], QuestionKey,
[NSNumber numberWithInt:rand()], AnswerScoreKey,
nil];
[allAnswers addObject:answer];
}
// sort the allAnswers array based on score, highest first
NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:AnswerScoreKey ascending:NO];
[allAnswers sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];
for (NSDictionary *answer in allAnswers)
{
NSLog(@"Question: %@, AnswerScore: %@", [answer objectForKey:QuestionKey], [answer objectForKey:AnswerScoreKey];
}
未经测试和未编译的代码。仅限理论。
答案 2 :(得分:0)
我不确定你到底想要实现的目标。是否要根据字典的值对字典对象数组进行排序?如果这是您想要的,您可以定义自己的比较器功能,并可以定义任何自定义排序行为。请检查sortedArrayUsingSelector:NSArray的方法。
编辑:我目前不在Mac上,但this previous question有许多示例代码可以解决您的问题。您可以使用NSDictionary,而不是使用对象,但在这种情况下我个人想要使用另一个Question对象而不是字典。这个问题类将包含两个值,id和score,然后你需要根据得分对问题数组进行排序,就像根据生日那样对人进行排序一样。