Как получить индекс в NSArray? - PullRequest
2 голосов
/ 11 ноября 2011
NSMutableArray*array = [[NSMutableArray alloc]init];

NSArray*Somearray = [NSArray arrayWithObjects:1st Object,2ndObject,3rd Object,4th object,5th Object,nil];

В указанном выше массиве 1-й объект, 2-й объект, 3-й объект, 4-й объект, 5-й объект, имеющий val, content, вывод в каждом индексе.

for(int i=0;i<[Somearray count];i++)
{

______________

Here the code is there to give each index ,that is having val,content,conclusion ..

After that  val,content,conclusion in each index will be add to Dict..
____________


NSDictionary *Dict = [NSDictionary dictionaryWithObjectsAndKeys:val,@"val",content,@"content",conclusion,@"conclusion",nil];

//Each time adding dictionary into array;

[array addObject:Dict];

}

Указанный выше словарь находится в цикле for ипары значений ключа будут добавлены 5 раз (Somearray Count). Теперь массив имеет значение

array = [{val="1.1 this is first one",content="This is the content of 0th index",conclusion="this is  the conclusion of 0th index"},{val="1.2 this is first one",content="This is the content of 1st index",conclusion="this is  the conclusion of 1st index"},____,____,______,{val="1.5 this is first one",content="This is the content of 4th index",conclusion="this is  the conclusion of 4th index"},nil];

Теперь у меня NSString*string = @"1.5";

Теперь мне нужен индекс, в котором значение val равно 1,5в нем. Как отправить str в массив, чтобы найти индекс.

Может кто-нибудь поделиться кодом, пожалуйста.

Заранее спасибо.

Ответы [ 4 ]

12 голосов
/ 11 ноября 2011

Использовать метод indexOfObject

int inx= [array indexOfObject:@"1.5"];

Для индекса поиска конкретного значения ключа.

int inx;
for (int i=0; i<[array count]; i++) {
    if ([[[array objectAtIndex:i] allKeys] containsObject:@"val"]) {
        inx=i;
         break; 
    }
}
6 голосов
/ 13 ноября 2011

Попробуйте это -

NSArray *valArray = [array valueForKey:@"val"];
int index = [valArray indexOfObject:@"1.5"]; 

Добавленный ответ, данный Мандипом, чтобы показать вам магию кодирования значения ключа;)

6 голосов
/ 11 ноября 2011

Метод, который вы ищете: -[NSArray indexOfObjectPassingTest:]. Вы бы использовали это так:

NSUInteger i = [array indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
        return [[id objectForKey:@"val"] rangeOfString:@"1.5"].location != NSNotFound;
    }];

Если вы просто хотите проверить, что val начинается с "1.5", вы должны использовать hasPrefix:.

2 голосов
/ 16 ноября 2011
 NSUInteger idx = UINT_MAX;
    NSCharacterSet* spaceSet = [NSCharacterSet whitespaceCharacterSet];
    for(int i=0,i_l=[Yourarray count];i<i_l;i++) {
        NSString* s_prime = [[Yourarray objectAtIndex:i] valueForKey:@"val"];
        if ([s_prime length] < 4) {
            continue;
        }
        NSString *subString = [[s_prime substringToIndex:4] stringByTrimmingCharactersInSet:spaceSet];
       // NSLog(@"index %@",s);
        if ([subString isEqualToString:secretNumber]){
            idx = i;
            break;
        }
    }
    if (idx != UINT_MAX) {
      //  NSLog(@"Found at index: %d",idx);
    } else {
     //   NSLog(@"Not found");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...