Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在iOS中使用@selector按值对NSMutableDictionary排序_Ios_Sorting_Nsmutablearray_Selector_Nsmutabledictionary - Fatal编程技术网

尝试在iOS中使用@selector按值对NSMutableDictionary排序

尝试在iOS中使用@selector按值对NSMutableDictionary排序,ios,sorting,nsmutablearray,selector,nsmutabledictionary,Ios,Sorting,Nsmutablearray,Selector,Nsmutabledictionary,我有一个NSMutableDictionary,其中包含NSStrings的键和类型为“分数”的对象。这是我创建的自定义对象,它就是由分子和分母组成的分数(每一个都是int)。我想做的是从NSMutableDictionary获取一个值数组(在本例中为“分数”对象),然后使用@selector对数组进行排序,如下所示: NSArray *myFractions = [myDict allValues]; NSArray *sortedFractions = [myFractions sorted

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

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

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

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


提前感谢。

在您的课堂上,您需要实现类似于以下内容的方法:

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

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

*未编译和检查

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

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;
}];
NSMutableDictionary*dict=//NSString键和分数值字典
NSArray*分数=[dict allValues];
NSArray*sortedFractions=[使用比较器进行的分数排序:^(id obj1,id obj2){
分数*f1=obj1;
分数*f2=obj2;
double diff=(double)(f1.num)/f1.denom-(double)(f2.num)/f2.denom;
返回diff<0?传感器终止搜索:diff>0?传感器终止搜索:传感器终止搜索名称;
}];

对象索引的调用是什么:
比较:
浮点数上的调用是什么?
应该是直接的>或者,我没有注意到这是一个原始的:(@anopvaidyia仍然,
对象索引:
在那里做什么?@H2CO3:它仍然是错误的还是有意义的?:(如此评论的无脑限制)。“现在很好”不能作为评论发布,因为它至少没有15个字符,所以我不得不写一些垃圾,使其足够长,以便让我能够发布。感谢您的及时回复。它不应该是[dict allValues]而不是[dict allObjects]?@syedfa当然应该这样。非常感谢碳酸氢盐,你的解决方案奏效了!@syedfa,这里只剩下一种化学成分。碳酸氢盐是HCO3-,H2CO3是碳酸。@rdelmar化学家们,救命吧!
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;
}];