web-dev-qa-db-ja.com

文字列プロパティの最初の文字で配列をフィルタリング

NSArrayプロパティを持つオブジェクトを持つnameがあります。

nameで配列をフィルター処理したい

    NSString *alphabet = [agencyIndex objectAtIndex:indexPath.section];
    //---get all states beginning with the letter---
    NSPredicate *predicate =
    [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet];
    NSMutableArray *listSimpl = [[NSMutableArray alloc] init];
    for (int i=0; i<[[Database sharedDatabase].agents count]; i++) {
        Town *_town = [[Database sharedDatabase].agents objectAtIndex:i];
        [listSimpl addObject:_town];
    }
    NSArray *states = [listSimpl filteredArrayUsingPredicate:predicate];

しかし、エラーが表示されます-「文字列ではないもので部分文字列操作を実行できません(lhs = <1、Arrow> rhs = A)」

これどうやってするの? nameの最初の文字が 'A'である配列をフィルター処理したいと思います。

16
Nubaslon

次のコードで試してください

NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF like %@", yourName];
NSArray *filteredArr = [yourArray filteredArrayUsingPredicate:pred];

EDITED:

NSPredicateパターンは次のようになります:

NSPredicate *pred =[NSPredicate predicateWithFormat:@"name beginswith[c] %@", alphabet];
24
iPatel

これは、配列をフィルタリングするためのNSPredicateの基本的な使用方法の1つです。

NSMutableArray *array =
[NSMutableArray arrayWithObjects:@"Nick", @"Ben", @"Adam", @"Melissa", @"arbind", nil];

NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b'"];
NSArray *beginWithB = [array filteredArrayUsingPredicate:sPredicate];
NSLog(@"beginwithB = %@",beginWithB);
10
Arvind

NSArrayは配列をソートするための別のセレクターを提供します:

NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(Person *first, Person *second) {
    return [first.name compare:second.name];
}];
3
Thomas Keuleers

filter arrayにしたい場合は、次のコードを見てください。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", @"qwe"];
NSArray *result = [self.categoryItems filteredArrayUsingPredicate:predicate];

しかしsort配列にしたい場合は、次の関数を見てください。

- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context;
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context hint:(NSData *)hint;
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator;
1

このライブラリをチェックアウト

https://github.com/BadChoice/Collection

ループを二度と書くことのない、簡単な配列関数がたくさんあります

だからあなたはただすることができます

NSArray* result = [thArray filter:^BOOL(NSString *text) {
    return [[name substr:0] isEqualToString:@"A"]; 
}] sort];

これは、Aで始まるテキストのみをアルファベット順に並べ替えます。

オブジェクトでそれをしている場合:

NSArray* result = [thArray filter:^BOOL(AnObject *object) {
    return [[object.name substr:0] isEqualToString:@"A"]; 
}] sort:@"name"];
0

訪問 https://developer.Apple.com/library/mac/documentation/Cocoa/Conceptual/Collections/Articles/Arrays.html

これを使って

[listArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
0
SreeHarsha