在nsarray中搜索最近的值

时间:2012-05-16 10:04:21

标签: ios nsarray nsdictionary

我有一个含有如下值的plist

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并读取该字典项的键值

我怎样才能找到最近的值?

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:4)

假设您的数组未排序,最简单的方法是使用for循环搜索数组,并跟踪壁橱编号的位置以及差异。这样的事情。

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;
      }
}

你必须处理这样一个事实,即你的数组中的对象不会被整理,所以你需要将它们从它们的任何东西中转换出来。

此方法效率也不高,如果对数组进行了排序,则可以进行二分查找,这是一种更好的方法。