1

我有一个包含以下值的 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 并读取该字典项的键值

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

任何帮助将不胜感激

4

1 回答 1

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

您将不得不处理数组中的对象不是整数的事实,因此您也需要将它们从它们的任何内容转换。

此外,这种方法效率不高,如果对数组进行了排序,您可以进行二进制搜索,这将是一种更好的方法。

于 2012-05-16T10:13:43.310 回答