2

特定のファイル(など)の配列があります(NSArrayまたは問題でNSMutableArrayはありません)。そして、すべてのファイルs : の大きな配列があります。のすべての要素が含まれている かどうかを確認する必要があります。SpecIDID109234IDFilesID
FilesIDSpecID

したがって、ループ内ですべての要素を単純に比較する以外に、これを行うための最速かつ最も効率的な方法は何ですか。いくつかの標準的な方法または効率的なアルゴリズムがあるのでしょうか?

4

1 に答える 1

12

セットを使用できます:

NSSet *specIDs = [NSSet setWithArray:specIDarray];
NSSet *fileIDs = [NSSet setWithArray:fileIDarray];

if ([specIDs isSubsetOfSet:fileIDs])
{
    // Your file IDs contains every ID found in specIDarray
}

これが効率的に機能するには、オブジェクトは理想的にはオブジェクトである必要があります。NSNumberカスタム オブジェクトの場合は、 と の両方hashをオーバーライドする必要がありますisEqual:。セットの効率は、主にhash. などの Foundation クラスにNSNumberNSString適切なハッシュがあります。

また、可能であれば、配列から ID を変換するのではなく、ID をセットに直接ロードする方が効率的ですが、それ以外の場合は、上記の方法はおそらく簡単です。パフォーマンスが向上する特殊なアルゴリズムがあるかもしれませんが、上記が遅すぎる場合にのみそれらのオプションを検討してください。

于 2013-02-18T00:41:11.763 に答える