2012-05-16 51 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来自plist的值67并且读取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

嗨本感谢您的建议上面 - 假设数组排序什么是二进制搜索组成? – superllanboy

+0

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

+0

被警告,这可以使你的应用程序超慢,如果你有很多值...(但它肯定是最简单的方法来编程!) –