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

配列内のオブジェクトが int ではないという事実に対処する必要があるため、それらが何であれ、それらも変換する必要があります。

また、この方法はあまり効率的ではありません。配列がソートされている場合は、バイナリ検索を実行できます。これははるかに優れたアプローチです。

于 2012-05-16T10:13:43.310 に答える