2012-05-16 6 views
1

я есть PLIST, содержащий следующие значенияпоиск в NSArray для ближайших значений

1,23,45,67,88,99,34,26,50,28 - и т.д., и т.д.

я доступ к PLIST следующим образом:

NSString *path2 = [[NSBundle mainBundle] pathForResource:@"Fractions" ofType:@"plist"]; 
pickerData2 =[[NSDictionary alloc]initWithContentsOfFile:path2]; 
selectorKeysFractions = [[NSArray alloc] initWithArray:[pickerData2 allKeys]]; 

теперь я хочу, чтобы искать PLIST для значений вблизи значения, введенного пользователем

так, например, если пользователь вводит 69 в текстовое поле я хочу найти значение 67 из plist и считывание t ключевые значения для этого словаря

Как я могу найти ближайшее значение?

любая помощь будет оценена

ответ

4

Предполагая, что ваш массив не отсортирован простым способом было бы искать через массив с для цикла и отслеживать, где количество шкаф и какая разница. Что-то вроде этого.

int lowestIndex=0, lowestDiff=INT_MAX; 
for(int i=0; i<selectorKeysFractions.count; i++) 
{ 
     int current = [selectorKeysFractions objectAtIndex:i]; 
     int diff = abs(userInput - current); 
     if(diff < lowestDiff) 
     { 
      lowestDiff = diff; 
      lowestIndex = i; 
     } 
} 

Вы должны будете иметь дело с тем, что объекты в массиве не будет Интс так что вам нужно будет конвертировать их от того, что они, как хорошо.

Также этот метод не очень эффективен, если массив был отсортирован, вы можете выполнить двоичный поиск, который будет гораздо лучшим подходом.

+0

hi ben спасибо за ваше предложение выше - если массив отсортирован, из чего состоит бинарный поиск? – superllanboy

+0

http://en.wikipedia.org/w/index.php?title=Binary_search_algorithm –

+0

Будьте осторожны, это может сделать ваше приложение SUPER медленным, если у вас много значений ... (Но это, безусловно, самый простой способ программирования !) –

Смежные вопросы