編集:私が理解したように、問題はありませんでした。間違った値を使用して結果を確認しただけです。
データベースのカスタムオブジェクトを非常に特定の順序でソートするという目標と比較するのに少し問題があります。原則として、それは非常に簡単です。ソートメカニズムは、文字列で表されるこのカスタムオブジェクトの2つのプロパティで動作する必要があります.ただし、数値も含まれる場合があります。
これは、現在修正しようとしているカスタム コンパレータ ブロックです。
NSArray *sortedArray = [baseAry sortedArrayUsingComparator:^NSComparisonResult(Obj *o1, Obj *o2) {
NSComparisonResult comp1 = [o1.attr_a compare:o2.attr_a];
if (comp1 == NSOrderedSame) {
return [o1.attr_b compare:o2.attr_b];
}
return [o1.attr_a compare:o2.attr_a];
}];
最終的に、リストは次のようになります。
- 12 - 3
- 12 - 8
- 13 - 1
- 14 - 2
- 14 - 4
- 22 - 1など
しかし、現在のコンパレータを使用すると、次のような結果しか得られません。
- 12 - 8
- 12 - 3
- 13 - 1
- 14 - 4
- 14 - 2
- 22 - 3
- 22 - 2
- 22 - 1
1 つのコード ブロックでこれを行う快適な方法はありますか? 私が想像できる別のアプローチは、リストをサブリストに分割し、これらを個別にソートし、最終的にそれらを接着することですが、これにはおそらくより多くの計算能力が必要になります