0

NSMutableDictionarys であるキーとNSString、「Fraction」型のオブジェクトである値を含むがあります。これは私が作成したカスタム オブジェクトであり、分子と分母 (それぞれが int) で構成される分数です。私がしたいのは、から値の配列 (この場合は "Fraction" オブジェクト) を取得し、次のようNSMutableDictionaryに配列を並べ替えることです。@selector

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

また

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

私の質問は、「Fraction」オブジェクトを最大から最小の順にソートする comparisonFunction メソッドを作成するにはどうすればよいですか? 各「Fraction」オブジェクトは、int 型の分子と int 型の分母の 2 つの変数で構成されていることに注意してください。

この質問は、投稿された他の質問とは異なります。ここでは、「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 に答える