2011-07-22 24 views
2

我有以下數組和搜索字符串。如何匹配NSArray中的字符串部分值objective-c

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

NSString *search = @"startcba"; 

我想在數組元素中搜索字符串的末尾部分。我的預期搜索結果將是@「cba」。請讓我知道如何找到數組中的願望值來進行搜索。

感謝,

+1

總是最後三個字符?如果是這樣,獲取子字符串併發送'[myArray indexOfObject:myString]'。 – 2011-07-22 12:06:14

+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的方式是偉大的。

這裏是rangeOfString的方法:

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