0

オーケー。曲名の配列があります。また、同じ曲名をいくつか含む CoreData データベースもあります。どの曲が両方に含まれているかを効率的に確認するにはどうすればよいですか? for ループを使用して、データベース内のすべての曲を配列内のすべての要素と比較したくはありません。また、CD 配列にある songnames 配列のどの要素番号を知る必要があります。誰でも私を助けることができますか?ありがとう!

4

4 に答える 4

5

2 つの配列を 2 つの異なるセットに追加してから、交点を見つけることができます。これにより、両方のセットで共通のオブジェクト(あなたの場合は曲名)が得られます。

例:

NSSet *set1 = [[NSSet alloc] initWithObjects:@"one",@"two", nil];
NSSet *set2 = [[NSSet alloc] initWithObjects:@"one",@"none", nil];
NSMutableSet *set3 = [[NSMutableSet alloc] initWithSet:set1];
[set3 intersectSet:set2];

あなたの場合、initWithArray メソッドを使用できます。

于 2012-05-10T15:23:26.193 に答える
2

songnames の配列が標準の NSArray である場合、線形検索操作 (つまり、for ループ) を実行する以外に選択肢はありません。別のデータ構造 (並べ替えられた配列など) を使用する場合は、一致を見つけるために線形検索の代わりにバイナリ半検索を行うことで、実行をいくらか短縮できます。

于 2012-05-10T14:24:15.510 に答える
1

NSArray のドキュメントには、配列のクエリと配列のオブジェクトの検索に関するセクションがあります。データベースから返された曲を繰り返し処理する必要がcontainsObject:あり'indexOfObject: ます。

NSArray *fetchResults = [NSArray arrayWithObjects:@"Song1", @"Song2", @"Song3", nil];    

for(id song in myArray) {
    if([fetchResults containsObject:song]) {
        int index = [fetchResults indexOfObject:song];
        // do something with value
    }
}
于 2012-05-11T03:15:32.983 に答える