客観的なc数学関数の質問.
セット内の他の値と比較したい ax 値を取得し、x 値が最も近いセットの値を特定します。
たとえば、int が 5、10、15、20、25 だとします。
これらの数のどれが 7 に最も近いかを判断する最善の方法は何ですか?
客観的なc数学関数の質問.
セット内の他の値と比較したい ax 値を取得し、x 値が最も近いセットの値を特定します。
たとえば、int が 5、10、15、20、25 だとします。
これらの数のどれが 7 に最も近いかを判断する最善の方法は何ですか?
int closestDistance = INT32_MAX;
int indexOfClosestDistance = -1;
int x = 7;
for (int i=0; i < [yourArray count]; i++)
{
int num = yourArray[i];
int diff = abs(num - x);
if (diff < closestDistance)
{
closestDistance = diff;
indexOfClosestDistance = i ;
}
}
幸運を祈ります
Objective-C も Cocoa も、これを解決するものを提供していません。int を のプレーンな古い配列に格納するint
か、それぞれを でラップしNSNumber
てラッパーを に格納することができますNSArray
。
配列を何度もプローブする場合は、事前に 1 回並べ替えてから、プローブごとにバイナリ検索 (標準 C 関数bsearch
または Core FoundationCFArrayBSearchValues
または Cocoa の関数-[NSArray indexOfObject:inSortedRange:options:usingComparator:]
) を使用して、最も近い 2 つの要素を見つけます。配列を 1 回か 2 回だけプローブする場合は、for ループ、減算、abs
および を使用しMIN
ます。
最も簡単な方法は、大きい数値から小さい数値を引くことです。したがって、最初に 2 つの数値を比較してから、単純な減算を行います。したがって、10-7 は 3 離れており、7-5 はわずか 2 離れていることがわかります。