0

編集:私が理解したように、問題はありませんでした。間違った値を使用して結果を確認しただけです。

データベースのカスタムオブジェクトを非常に特定の順序でソートするという目標と比較するのに少し問題があります。原則として、それは非常に簡単です。ソートメカニズムは、文字列で表されるこのカスタムオブジェクトの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 つのコード ブロックでこれを行う快適な方法はありますか? 私が想像できる別のアプローチは、リストをサブリストに分割し、これらを個別にソートし、最終的にそれらを接着することですが、これにはおそらくより多くの計算能力が必要になります

4

1 に答える 1

0

attr_a最初に両方のオブジェクトを比較する必要があります。等しい場合はattr_b、両方のオブジェクトを比較します。

NSComparisonResult comp = [o1.attr_a compare:o2.attr_a];
if (comp == NSOrderedSame) {
    comp = [o1.attr_b compare:o2.attr_b];    
}
return comp; 

(コードattr_aは最初のオブジェクトとattr_b2 番目のオブジェクトを比較しますが、これはあまり意味がありません。)

于 2013-04-02T11:37:23.273 に答える