1

私が達成しようとしているのは、配列で文字列を検索することです。配列を検索するためのコードは次のとおりです

    if ([EssentialsArray containsObject:imageFilePath]) {

        NSLog(@"YES");
    }
    else {

        NSLog(@"NO");
        NSLog(@"%@", ImageFilePath);
        NSLog(@"%@", EssentialsArray);
    }

NSLogs は、imageFilePath に対してこれを返します。

/var/mobile/Applications/5051DC84-CAC8-4C1D-841D-5539A1E28CB1/Documents/12242012_11025125_image.jpg

EssentialsArray の場合は次のようになります。

(
        {
        EssentialImage = "/var/mobile/Applications/5051DC84-CAC8-4C1D-841D-5539A1E28CB1/Documents/12242012_11025125_image.jpg";
    }
)

そして、配列が文字列を見つけることができなかったため、明らかに「NO」値を返します。前もって感謝します

4

1 に答える 1

4

問題は、 の呼び出しがそれが文字列の配列であると[EssentialsArray containsObject:imageFilePath]明確に想定しているのに対し、そうではないことです。EssentialsArrayこれは、1 つのキーを持つ辞書エントリの配列ですEssentialImage

少なくとも 2 つの解決策があります。1 つ目は、キーが である辞書エントリの文字列の配列を作成することですEssentialImage

NSArray *essentialImages = [essentialsArray valueForKey:@"EssentialImage"];

if ([essentialImages containsObject:imagePath])
    NSLog(@"YES");
else
    NSLog(@"NO");

のサイズに応じてessentialsArray(変数は常に小文字で始まることが規則で定められていることに注意してください)、できるように配列を作成するのは少し無駄に思えますがcontainsObject、機能します。

第二に、私の意見では、高速列挙を使用して辞書エントリの配列を調べ、一致を探すことをお勧めします。これを行うには、メソッドを定義します。

- (BOOL)arrayOfDictionaries:(NSArray *)array
       hasDictionaryWithKey:(id)key
             andStringValue:(NSString *)value
{
    for (NSDictionary *dictionary in array) {
        if ([dictionary[key] isEqualToString:value]) {
            return YES;
        }
    }

    return NO;
}

@"EssentialImage"辞書の配列に含まれる文字列と等しい文字列値で呼び出されるキーがあるかどうかを確認できるようになりました。imagePath

if ([self arrayOfDictionaries:essentialsArray
         hasDictionaryWithKey:@"EssentialImage" 
               andStringValue:imagePath])
    NSLog(@"YES");
else
    NSLog(@"NO");

アップデート:

述語も使用できます。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"EssentialImage contains %@", imagePath];

BOOL found = [predicate evaluateWithObject:array];
于 2012-12-24T02:36:11.020 に答える