0

NSArraywith オブジェクトと double を持つ C 配列があります。NSArrayC 配列の値に基づいてオブジェクトを並べ替えたいと思います。

私が考えることができる唯一の方法は以下のとおりです(このSOの質問に基づいて):

NSArray *sortedArray;
sortedArray = [origArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) 
{
    // Getting c array values at the same indices as the objects being compared
    NSNumber *aValue = @(cArray[[origArray indexOfObject:a]]);
    NSNumber *bValue = @(cArray[[origArray indexOfObject:b]]);
    // Returning comparison result
    return [aValue compare:bValue];
}];

indexOfObject:ただ、部品代が高いと思います。そうですか?

もしそうなら、これを行うより速い方法はありますか?

編集:

もう少しコンテキストを提供するために、この並べ替えは最適化アルゴリズムの適合性評価の一部です。私のプログラムでは、基本的なプロファイリングを行いましたが、フィットネス評価コードがボトルネックであることが判明しました。そのため、私はそれを最適化しようとしています。

また、配列内の要素数は、最大で 100 から 10k 程度になると予想されます。

4

4 に答える 4

0

単一の懸念事項がオーバーヘッドであるindexOfObject:場合は、 を使用することをお勧めしますindexOfObjectIdenticalTo:。すべての要素へのメッセージを省略しているisEqual:ため、配列に多くの要素がある場合は高速になる可能性があります。

于 2013-10-15T10:46:16.657 に答える