パフォーマンスに関しては、比較的大きな配列 (これまでのところ、元の配列の通常のカウントは ±20000 です) で、それをフィルター処理するのに最適な方法はどれですか? ブロックまたは述語?
含まれているオブジェクトの ivar のほとんどは文字列であり、それらを照会したいと考えています。
パフォーマンスに関しては、比較的大きな配列 (これまでのところ、元の配列の通常のカウントは ±20000 です) で、それをフィルター処理するのに最適な方法はどれですか? ブロックまたは述語?
含まれているオブジェクトの ivar のほとんどは文字列であり、それらを照会したいと考えています。
ブロックを高速化する方法が1つあります。
NSEnumerationConcurrent
配列を列挙するために使用します。ただし、ドキュメントには、同時に列挙するときに順序が保持されることが明示的に記載されていません。そうならないのは良いことだと思います。配列の順序が重要な場合は、再ソートする必要があり(可能であれば)、タイミング比較にそれを含める必要があります。
他の方法は、ブロックを使用して非並行的に列挙し、述語を使用してフィルタリングすることです。filterUsingPredicate:
NSArrayは、内部の知識を使用して、繰り返されるメッセージよりも速く結果配列を構築する機会があるため、より高速になる可能性がありaddObject:
ます。しかし、それは単なる可能性です。確実に知る唯一の方法は比較することであり、それでも答えはいつでも変わる可能性があります(同じプロセス内を含め、異なる入力配列または配列内の異なるオブジェクトに対して)。
私のアドバイスは、最初は述語を使用して簡単に実装し、次にInstrumentsを使用してパフォーマンスの問題かどうかを確認することです。そうでない場合は、明確なコードが優先されます。パフォーマンスの問題である場合は、同時列挙を試してください。
パフォーマンスについて語るとき、実験に勝るものはありません。ブロックや使用するソリューションのさまざまなパフォーマンスへの影響について丸一日議論することもできますが、アプリケーションで使用される実際のデータを測定するのが最善です。