我有一个含有如下值的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并读取该字典项的键值
我怎样才能找到最近的值?
任何帮助将不胜感激
答案 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;
}
}
你必须处理这样一个事实,即你的数组中的对象不会被整理,所以你需要将它们从它们的任何东西中转换出来。
此方法效率也不高,如果对数组进行了排序,则可以进行二分查找,这是一种更好的方法。