2

2 年前に書いた Java でCantor Pairing Functionを実装しています。次に、iOS にさらに移行します。Objective-C でも同じことが必要です。

問題は、少なくとも私の観点からは、Java では自分で行ったBigSqrtクラスを実装する必要があったことです。理論的には、任意のサイズの数値をペアリングできるようになったためです。

私はiOSが初めてなので、Objective-Cのためにすべてのものを再度実装する必要があるのか​​ 、それともすでに実装されているものがあるのか​​ 本当にわかりません。もしそうなら、誰かがObjective-Cの任意のサイズの「整数」に対してCantor Pairing 関数の実装を開始するヒントを教えてもらえますか?

ありがとう

4

2 に答える 2

6

これを使用して、テーブルビュー セルにタグを設定しました。

NSUInteger cantorPair(NSIndexPath *indexPath)
{
    NSUInteger x = indexPath.section;
    NSUInteger y = indexPath.row;
    return ((x + y) * (x + y + 1)) / 2 + y;
}


NSIndexPath *reverseCantorPair(NSUInteger z)
{
    NSUInteger t = floor((-1.0f + sqrt(1.0f + 8.0f * z))/2.0f);
    NSUInteger x = t * (t + 3) / 2 - z;
    NSUInteger y = z - t * (t + 1) / 2;
    return [NSIndexPath indexPathForRow:y inSection:x];
}
于 2014-08-15T05:47:25.053 に答える
2

これは C# バージョン用ですが、Objective-C でもほぼ同じはずです。

http://sachiniscool.blogspot.com/2011/06/cantor-pairing-function-and-reversal.html

int CantorPair(short x, short y)
{
    return ((x + y) * (x + y + 1)) / 2 + y;
}

ペアリングを逆にする

short[] Reverse(int z)
{
    short[] pair = new short[2];
    int t = (int)Math.Floor((-1D + Math.Sqrt(1D + 8 * z))/2D);
    int x = t * (t + 3) / 2 - z;
    int y = z - t * (t + 1) / 2;
    pair[0] = (short)x;
    pair[1] = (short)y;
    return pair;
}
于 2013-04-28T16:49:34.297 に答える