2011-07-22 32 views
2

次の配列と検索文字列があります。objective-cの文字列部分とNSArray値の一致方法

NSArray *values =[NSArray arrayWithObjects:@"abc",@"xyz",@"cba",@"yzx",nil]; 

NSString *search = @"startcba"; 

文字列の最後の部分を配列要素内で検索したいと考えています。私の予想される検索結果は@ "cba"になります。検索を行うための配列の欲望の値を見つける方法を教えてください。

おかげで、

+1

常に最後の3つの文字:ここ

はrangeOfStringとのアプローチがありますか?その場合は、部分文字列を取得し、 '[myArray indexOfObject:myString]'を送信します。 –

+0

申し訳ありませんが、次のような長さにすることができます:\t NSArray * values = [NSArray arrayWithObjects:@ "abc"、@ "xyz"、@ "cba"、@ "yzx"、@ "Abcd"、nil]; \t \t NSString * search = @ "startabcd"; – AmitSri

答えて

4

あなたの要件を満たす要素を取得するためにNSPredicateを使用することができます。

NSPredicate * predicate = [NSPredicate predicateWithFormat:@" %@ ENDSWITH SELF ", search]; 
NSArray * searchResults = [values filteredArrayUsingPredicate:predicate]; 
+2

大文字と小文字の区別を避けるために、述語に 'c'と' d'を指定できます。したがって、述語形式はこのようになります@%@ ENDSWITH [cd] SELF "' – EmptyStack

+0

簡単で正確なソリューションを提供してくれたDeepakとEmptyStackに感謝します。 – AmitSri

1

NSPredicates方法は素晴らしいです。

NSArray *values =[NSArray arrayWithObjects:@"abc",@"xyz",@"cba",@"yzx",nil]; 

NSString *search = @"startcba"; 
NSUInteger searchLength = [search length]; 
NSString *result = nil; 

for (NSString *val in values) 
{ 
    NSUInteger valLength = [val length]; 
    NSRange expectedRange = NSMakeRange(searchLength - valLength, valLength); 
    NSRange rng = [search rangeOfString:val]; 

    if (rng.location == expectedRange.location && rng.length == expectedRange.length) 
    { 
     result = val; 
     break; 
    } 
} 
+0

おかげさまで、あなたのrangeOfStringアプローチはdeepakのように同じように優れており、同じループ内のアイテムのインデックスを見つけることもできます。申し訳ありませんが、まさに私が必要としていたので、私はdeepakの答えを受け入れる必要があります。私はあなたの貴重な助けに感謝します。 – AmitSri

関連する問題