2012-05-16 76 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

被警告,這可以使你的應用程序超慢,如果你有很多值...(但它肯定是最簡單的方法來編程!) –