0

私の問題シナリオはこんな感じです。NSMutableArray があります (すべてのオブジェクトは Nsstring です)。検索用のUItextField(クライアントが言ったように)があります。

このように文字列を NSMutableArray に検索する方法を知りたい

テキストフィールドに A と入力すると、A から始まる NSMutableArray からのコンテンツのみが取得されます。TextField に AB と入力すると、AB から開始される NSMutableArray からのコンテンツのみが取得されます.. .... NSRange の概念を試しています。

  for (int i=0; i<[[localTotalArrayForAwailable objectForKey:@"PUNCH"] count]; i++)
{

    NSString *drinkNamePuch= [[[localTotalArrayForAwailable objectForKey:@"PUNCH"]  objectAtIndex:i] drinkNames];

    NSRange titleResultsRange = [drinkNamePuch rangeOfString:searchText options:( NSCaseInsensitiveSearch)];

    if (titleResultsRange.length>0)
    {
        [searchArraypuch addObject:[[localTotalArrayForAwailable objectForKey:@"PUNCH"]  objectAtIndex:i]];
        [copyListOfItems setValue:searchArraypuch forKey:@"PUNCH"];
    }
}

このコード検索に基づいて、必要に応じて適切に機能しません。

ありがとう

4

4 に答える 4

1

最初から一致するすべての文字列を見つけようとしている場合はsearchText、次を確認する必要があります。

if ( titleresultsRange.location == 0 )

それ以外は、何が「適切に機能していない」のかわかりません。期待される結果と実際の結果について、より適切な説明を提供する必要があります。

于 2012-10-31T19:58:13.463 に答える
1

これを行う;

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[cd] %@", searchText];
NSArray* filteredStrings = [[localTotalArrayForAwailable objectForKey:@"PUNCH"]  filteredArrayUsingPredicate:predicate];

filteredStrings では、searchText で始まるすべての文字列を取得しました。

Predicate Programming Guideが役に立つかもしれません。

于 2012-10-31T19:59:10.313 に答える
0

このロジックを試してください....それは機能しています

 NSMutableArray *arr = [[NSMutableArray alloc]initWithObjects:@"aa",@"bbb",@"bb",@"cc",@"dd",@"ee",@"ff",@"gg",@"hh",@"ii", nil];
NSMutableArray *arrNew = [[NSMutableArray alloc]init];
NSString *strSearch = @"cccc";
int k = strSearch.length;
for (int i=0; i<[arr count]; i++) {
    for (int j=0; j<k; j++) {
        if (k<=[[arr objectAtIndex:i] length]) {
            if ([strSearch characterAtIndex:j] != [[arr objectAtIndex:i]characterAtIndex:j]) {
                break;
            }
            else if(j == k-1){
                [arrNew addObject:[arr objectAtIndex:i]];
            }
        }
    }
}
NSLog(@"%@",[arrNew description]);
于 2012-11-01T06:00:31.480 に答える
0

NSArray/NSMutableArray によって提供されるこれらのメソッドを使用できます。

  1. NSArrayでは、「indexesOfObjects...」で始まるメソッドのフィルタリングについては、セクション「配列内のオブジェクトの検索」を参照してください。たとえば、indexesOfObjectsPassingTest:

  2. NSArrayでは、 filteredArrayUsingPredicateメソッドについて「新しい配列の派生」セクションを参照してください。

  3. NSMutableArrayには、filterUsingPredicate メソッドがあります

結果を絞り込むために、フィルタリングされた配列またはインデックス セットに連続してフィルタリングを適用し続けることができます。


indexsOfObjectsPassingTestの例:ブロックの使用:

NSArray *strings = [NSArray arrayWithObjects:@"A", @"a", @"aB", @"AbC", @"Bag", @"Babc", @"baCK", @"", @"dba", nil];
NSString *searchString = @"Ab";

BOOL (^startsWithPredicate)(id, NSUInteger, BOOL*) = ^BOOL (id obj, NSUInteger idx, BOOL *stop) {
    NSString *string = (NSString *) obj;
    NSRange range = [string rangeOfString:searchString options:NSCaseInsensitiveSearch];
    return (range.location == 0);
};

NSIndexSet *indexSet = [strings indexesOfObjectsPassingTest:startsWithPredicate];
NSLog(@"Strings found: %@", [strings objectsAtIndexes:indexSet]);

出力:

Strings found: (
    aB,
    AbC
)
于 2012-10-31T20:11:52.647 に答える