0

我有一个NSMutableDictionary包含NSStrings 的键和“分数”类型的对象的值。这是我创建的一个自定义对象,它就是这样,由一个分子和一个分母组成的分数(每个都是一个 int)。我想做的是从 中获取一个值数组(在本例中为“分数”对象)NSMutableDictionary,然后使用@selector如下方式对数组进行排序:

NSArray *myFractions = [myDict allValues];
NSArray *sortedFractions = [myFractions sortedArrayUsingSelector:@selector(comparator)];

或者

NSArray *myFractions = [myDict allValues];
NSArray *sortedFractions = [myFractions sortedArrayUsingFunction:comparatorFunction context:nil];

我的问题是,如何创建一个comparatorFunction 方法,该方法将“分数”对象按从大到小的顺序排序?请记住,每个“分数”对象都由两个变量组成:一个 int 类型的分子,一个也是 int 类型的分母。

这个问题与其他已发布的问题不同,因为我在这里询问如何在“sortedArrayUsingFunction”方法中对“Fraction”对象从最大到最小进行排序。其他被认为是重复的问题是查看基于 NSDate 对象或基于 NSString 值的排序,而我的不同。正如我所说,我对此很陌生,需要更具体的东西。

提前致谢。

4

2 回答 2

0

在您的课程中,您需要实现类似于以下的方法:

-(NSComparisonResult)compareFirstName:(Fraction *)fraction{

      return ((float)self.numerator/self.denominator > (float)fraction.numerator/fraction.denominator);
}

*未编译和检查

于 2013-03-10T10:11:47.033 回答
0

作为一种风格上的改进,我可以建议您使用闭包而不是函数吗?要按降序对对象进行排序,只需比较它们的实际数值,如下所示:

NSMutableDictionary *dict = // dictionary of NSString keys and Fraction values
NSArray *fractions = [dict allValues];

NSArray *sortedFractions = [fractions sortedArrayUsingComparator:^(id obj1, id obj2) {
    Fraction *f1 = obj1;
    Fraction *f2 = obj2;
    double diff = (double)(f1.num) / f1.denom - (double)(f2.num) / f2.denom;
    return diff < 0 ? NSOrderedAscending : diff > 0 ? NSOrderedDescending : NSOrderedSame;
}];
于 2013-03-10T10:13:26.520 回答