Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 项目不存在的有序列表‘;在云中彼此不认识,按属性排序:当用户重新排序时,如何避免云中的索引更改?_Swift_Algorithm - Fatal编程技术网

Swift 项目不存在的有序列表‘;在云中彼此不认识,按属性排序:当用户重新排序时,如何避免云中的索引更改?

Swift 项目不存在的有序列表‘;在云中彼此不认识,按属性排序:当用户重新排序时,如何避免云中的索引更改?,swift,algorithm,Swift,Algorithm,例如,我正在一个NSFetchedResultsController中使用sortDescriptor 当我将一个项目从一个地方移动到另一个地方时,我不想更改其间的每条记录 例子 选项1:整数之间的差距 它的缺点是,它仍然需要思考,以防项目可能被频繁地插入两个项目之间 最大的差距最坏的情况:总是介于两者之间 func int64Test() { let a: Int64 = 0 var b: Int64 = Int64.max var i = 0 while a

例如,我正在一个
NSFetchedResultsController中使用
sortDescriptor
当我将一个项目从一个地方移动到另一个地方时,我不想更改其间的每条记录

例子 选项1:整数之间的差距 它的缺点是,它仍然需要思考,以防项目可能被频繁地插入两个项目之间

最大的差距最坏的情况:总是介于两者之间

func int64Test() {
    let a: Int64 = 0
    var b: Int64 = Int64.max

    var i = 0
    while a != b {
        print("i:", i, "a:", a, "b:", b, "diff:", b-a)
        //        b = (b - a) / 2.0 + a
        b = (b + a) / 2
        i = i + 1
    }
}

i: 0 a: 0 b: 9223372036854775807 diff: 9223372036854775807
i: 1 a: 0 b: 4611686018427387903 diff: 4611686018427387903
i: 2 a: 0 b: 2305843009213693951 diff: 2305843009213693951
i: 3 a: 0 b: 1152921504606846975 diff: 1152921504606846975
i: 4 a: 0 b: 576460752303423487 diff: 576460752303423487
i: 5 a: 0 b: 288230376151711743 diff: 288230376151711743
i: 6 a: 0 b: 144115188075855871 diff: 144115188075855871
i: 7 a: 0 b: 72057594037927935 diff: 72057594037927935
i: 8 a: 0 b: 36028797018963967 diff: 36028797018963967
i: 9 a: 0 b: 18014398509481983 diff: 18014398509481983
i: 10 a: 0 b: 9007199254740991 diff: 9007199254740991
i: 11 a: 0 b: 4503599627370495 diff: 4503599627370495
i: 12 a: 0 b: 2251799813685247 diff: 2251799813685247
i: 13 a: 0 b: 1125899906842623 diff: 1125899906842623
i: 14 a: 0 b: 562949953421311 diff: 562949953421311
i: 15 a: 0 b: 281474976710655 diff: 281474976710655
i: 16 a: 0 b: 140737488355327 diff: 140737488355327
i: 17 a: 0 b: 70368744177663 diff: 70368744177663
i: 18 a: 0 b: 35184372088831 diff: 35184372088831
i: 19 a: 0 b: 17592186044415 diff: 17592186044415
i: 20 a: 0 b: 8796093022207 diff: 8796093022207
i: 21 a: 0 b: 4398046511103 diff: 4398046511103
i: 22 a: 0 b: 2199023255551 diff: 2199023255551
i: 23 a: 0 b: 1099511627775 diff: 1099511627775
i: 24 a: 0 b: 549755813887 diff: 549755813887
i: 25 a: 0 b: 274877906943 diff: 274877906943
i: 26 a: 0 b: 137438953471 diff: 137438953471
i: 27 a: 0 b: 68719476735 diff: 68719476735
i: 28 a: 0 b: 34359738367 diff: 34359738367
i: 29 a: 0 b: 17179869183 diff: 17179869183
i: 30 a: 0 b: 8589934591 diff: 8589934591
i: 31 a: 0 b: 4294967295 diff: 4294967295
i: 32 a: 0 b: 2147483647 diff: 2147483647
i: 33 a: 0 b: 1073741823 diff: 1073741823
i: 34 a: 0 b: 536870911 diff: 536870911
i: 35 a: 0 b: 268435455 diff: 268435455
i: 36 a: 0 b: 134217727 diff: 134217727
i: 37 a: 0 b: 67108863 diff: 67108863
i: 38 a: 0 b: 33554431 diff: 33554431
i: 39 a: 0 b: 16777215 diff: 16777215
i: 40 a: 0 b: 8388607 diff: 8388607
i: 41 a: 0 b: 4194303 diff: 4194303
i: 42 a: 0 b: 2097151 diff: 2097151
i: 43 a: 0 b: 1048575 diff: 1048575
i: 44 a: 0 b: 524287 diff: 524287
i: 45 a: 0 b: 262143 diff: 262143
i: 46 a: 0 b: 131071 diff: 131071
i: 47 a: 0 b: 65535 diff: 65535
i: 48 a: 0 b: 32767 diff: 32767
i: 49 a: 0 b: 16383 diff: 16383
i: 50 a: 0 b: 8191 diff: 8191
i: 51 a: 0 b: 4095 diff: 4095
i: 52 a: 0 b: 2047 diff: 2047
i: 53 a: 0 b: 1023 diff: 1023
i: 54 a: 0 b: 511 diff: 511
i: 55 a: 0 b: 255 diff: 255
i: 56 a: 0 b: 127 diff: 127
i: 57 a: 0 b: 63 diff: 63
i: 58 a: 0 b: 31 diff: 31
i: 59 a: 0 b: 15 diff: 15
i: 60 a: 0 b: 7 diff: 7
i: 61 a: 0 b: 3 diff: 3
i: 62 a: 0 b: 1 diff: 1
选项2:字符串和长度 因为没有负数,所以这更不方便,但是字符串只受内存的限制,因此可能比#1有优势

备选方案3:双倍 虽然Double在准确性上有限制,但也不是完美的

func doubleTest() {
    let a: Double = 1
    var b: Double = 2

    var i = 0
    while a != b {
        print("i:", i, "a:", a, "b:", b, "diff:", b-a)
        //        b = (b - a) / 2.0 + a
        b = (b + a) / 2
        i = i + 1
    }
}

i: 0 a: 1.0 b: 2.0 diff: 1.0
i: 1 a: 1.0 b: 1.5 diff: 0.5
i: 2 a: 1.0 b: 1.25 diff: 0.25
i: 3 a: 1.0 b: 1.125 diff: 0.125
i: 4 a: 1.0 b: 1.0625 diff: 0.0625
i: 5 a: 1.0 b: 1.03125 diff: 0.03125
i: 6 a: 1.0 b: 1.015625 diff: 0.015625
i: 7 a: 1.0 b: 1.0078125 diff: 0.0078125
i: 8 a: 1.0 b: 1.00390625 diff: 0.00390625
i: 9 a: 1.0 b: 1.001953125 diff: 0.001953125
i: 10 a: 1.0 b: 1.0009765625 diff: 0.0009765625
i: 11 a: 1.0 b: 1.00048828125 diff: 0.00048828125
i: 12 a: 1.0 b: 1.000244140625 diff: 0.000244140625
i: 13 a: 1.0 b: 1.0001220703125 diff: 0.0001220703125
i: 14 a: 1.0 b: 1.00006103515625 diff: 6.103515625e-05
i: 15 a: 1.0 b: 1.000030517578125 diff: 3.0517578125e-05
i: 16 a: 1.0 b: 1.0000152587890625 diff: 1.52587890625e-05
i: 17 a: 1.0 b: 1.0000076293945312 diff: 7.62939453125e-06
i: 18 a: 1.0 b: 1.0000038146972656 diff: 3.814697265625e-06
i: 19 a: 1.0 b: 1.0000019073486328 diff: 1.9073486328125e-06
i: 20 a: 1.0 b: 1.0000009536743164 diff: 9.5367431640625e-07
i: 21 a: 1.0 b: 1.0000004768371582 diff: 4.76837158203125e-07
i: 22 a: 1.0 b: 1.000000238418579 diff: 2.384185791015625e-07
i: 23 a: 1.0 b: 1.0000001192092896 diff: 1.1920928955078125e-07
i: 24 a: 1.0 b: 1.0000000596046448 diff: 5.960464477539063e-08
i: 25 a: 1.0 b: 1.0000000298023224 diff: 2.9802322387695312e-08
i: 26 a: 1.0 b: 1.0000000149011612 diff: 1.4901161193847656e-08
i: 27 a: 1.0 b: 1.0000000074505806 diff: 7.450580596923828e-09
i: 28 a: 1.0 b: 1.0000000037252903 diff: 3.725290298461914e-09
i: 29 a: 1.0 b: 1.0000000018626451 diff: 1.862645149230957e-09
i: 30 a: 1.0 b: 1.0000000009313226 diff: 9.313225746154785e-10
i: 31 a: 1.0 b: 1.0000000004656613 diff: 4.656612873077393e-10
i: 32 a: 1.0 b: 1.0000000002328306 diff: 2.3283064365386963e-10
i: 33 a: 1.0 b: 1.0000000001164153 diff: 1.1641532182693481e-10
i: 34 a: 1.0 b: 1.0000000000582077 diff: 5.820766091346741e-11
i: 35 a: 1.0 b: 1.0000000000291038 diff: 2.9103830456733704e-11
i: 36 a: 1.0 b: 1.000000000014552 diff: 1.4551915228366852e-11
i: 37 a: 1.0 b: 1.000000000007276 diff: 7.275957614183426e-12
i: 38 a: 1.0 b: 1.000000000003638 diff: 3.637978807091713e-12
i: 39 a: 1.0 b: 1.000000000001819 diff: 1.8189894035458565e-12
i: 40 a: 1.0 b: 1.0000000000009095 diff: 9.094947017729282e-13
i: 41 a: 1.0 b: 1.0000000000004547 diff: 4.547473508864641e-13
i: 42 a: 1.0 b: 1.0000000000002274 diff: 2.2737367544323206e-13
i: 43 a: 1.0 b: 1.0000000000001137 diff: 1.1368683772161603e-13
i: 44 a: 1.0 b: 1.0000000000000568 diff: 5.684341886080802e-14
i: 45 a: 1.0 b: 1.0000000000000284 diff: 2.842170943040401e-14
i: 46 a: 1.0 b: 1.0000000000000142 diff: 1.4210854715202004e-14
i: 47 a: 1.0 b: 1.000000000000007 diff: 7.105427357601002e-15
i: 48 a: 1.0 b: 1.0000000000000036 diff: 3.552713678800501e-15
i: 49 a: 1.0 b: 1.0000000000000018 diff: 1.7763568394002505e-15
i: 50 a: 1.0 b: 1.0000000000000009 diff: 8.881784197001252e-16
i: 51 a: 1.0 b: 1.0000000000000004 diff: 4.440892098500626e-16
i: 52 a: 1.0 b: 1.0000000000000002 diff: 2.220446049250313e-16

选项4:BigDoubleJust调用插入行委托和
tableView.BeginUpdate
tableView.endUpdates
在更改数据源之后。@rakeshashstri这对不必更新新插入项右侧的sortIndexes有什么帮助?swift在insert方法中还没有这样做吗?@rakeshashstri Yes集合实现insert。关键是云中的所有对象,用户可以在集合中移动项目。列表是按sortKey排序的,所以四处移动会更改sortKey,所以Collection没有帮助,因为Collection不会对项目进行排序,
sortKey
会。
func int64Test() {
    let a: Int64 = 0
    var b: Int64 = Int64.max

    var i = 0
    while a != b {
        print("i:", i, "a:", a, "b:", b, "diff:", b-a)
        //        b = (b - a) / 2.0 + a
        b = (b + a) / 2
        i = i + 1
    }
}

i: 0 a: 0 b: 9223372036854775807 diff: 9223372036854775807
i: 1 a: 0 b: 4611686018427387903 diff: 4611686018427387903
i: 2 a: 0 b: 2305843009213693951 diff: 2305843009213693951
i: 3 a: 0 b: 1152921504606846975 diff: 1152921504606846975
i: 4 a: 0 b: 576460752303423487 diff: 576460752303423487
i: 5 a: 0 b: 288230376151711743 diff: 288230376151711743
i: 6 a: 0 b: 144115188075855871 diff: 144115188075855871
i: 7 a: 0 b: 72057594037927935 diff: 72057594037927935
i: 8 a: 0 b: 36028797018963967 diff: 36028797018963967
i: 9 a: 0 b: 18014398509481983 diff: 18014398509481983
i: 10 a: 0 b: 9007199254740991 diff: 9007199254740991
i: 11 a: 0 b: 4503599627370495 diff: 4503599627370495
i: 12 a: 0 b: 2251799813685247 diff: 2251799813685247
i: 13 a: 0 b: 1125899906842623 diff: 1125899906842623
i: 14 a: 0 b: 562949953421311 diff: 562949953421311
i: 15 a: 0 b: 281474976710655 diff: 281474976710655
i: 16 a: 0 b: 140737488355327 diff: 140737488355327
i: 17 a: 0 b: 70368744177663 diff: 70368744177663
i: 18 a: 0 b: 35184372088831 diff: 35184372088831
i: 19 a: 0 b: 17592186044415 diff: 17592186044415
i: 20 a: 0 b: 8796093022207 diff: 8796093022207
i: 21 a: 0 b: 4398046511103 diff: 4398046511103
i: 22 a: 0 b: 2199023255551 diff: 2199023255551
i: 23 a: 0 b: 1099511627775 diff: 1099511627775
i: 24 a: 0 b: 549755813887 diff: 549755813887
i: 25 a: 0 b: 274877906943 diff: 274877906943
i: 26 a: 0 b: 137438953471 diff: 137438953471
i: 27 a: 0 b: 68719476735 diff: 68719476735
i: 28 a: 0 b: 34359738367 diff: 34359738367
i: 29 a: 0 b: 17179869183 diff: 17179869183
i: 30 a: 0 b: 8589934591 diff: 8589934591
i: 31 a: 0 b: 4294967295 diff: 4294967295
i: 32 a: 0 b: 2147483647 diff: 2147483647
i: 33 a: 0 b: 1073741823 diff: 1073741823
i: 34 a: 0 b: 536870911 diff: 536870911
i: 35 a: 0 b: 268435455 diff: 268435455
i: 36 a: 0 b: 134217727 diff: 134217727
i: 37 a: 0 b: 67108863 diff: 67108863
i: 38 a: 0 b: 33554431 diff: 33554431
i: 39 a: 0 b: 16777215 diff: 16777215
i: 40 a: 0 b: 8388607 diff: 8388607
i: 41 a: 0 b: 4194303 diff: 4194303
i: 42 a: 0 b: 2097151 diff: 2097151
i: 43 a: 0 b: 1048575 diff: 1048575
i: 44 a: 0 b: 524287 diff: 524287
i: 45 a: 0 b: 262143 diff: 262143
i: 46 a: 0 b: 131071 diff: 131071
i: 47 a: 0 b: 65535 diff: 65535
i: 48 a: 0 b: 32767 diff: 32767
i: 49 a: 0 b: 16383 diff: 16383
i: 50 a: 0 b: 8191 diff: 8191
i: 51 a: 0 b: 4095 diff: 4095
i: 52 a: 0 b: 2047 diff: 2047
i: 53 a: 0 b: 1023 diff: 1023
i: 54 a: 0 b: 511 diff: 511
i: 55 a: 0 b: 255 diff: 255
i: 56 a: 0 b: 127 diff: 127
i: 57 a: 0 b: 63 diff: 63
i: 58 a: 0 b: 31 diff: 31
i: 59 a: 0 b: 15 diff: 15
i: 60 a: 0 b: 7 diff: 7
i: 61 a: 0 b: 3 diff: 3
i: 62 a: 0 b: 1 diff: 1
a.index=c b.index=f c.index=i
# Moving c to the front requires 1 index change
c.index=a a.index=c b.index=f    
a.index=5 b.index=10 c.index=15
# Moving c to the front requires 1 index change
c.index=7.5 a.index=5 b.index=10
func doubleTest() {
    let a: Double = 1
    var b: Double = 2

    var i = 0
    while a != b {
        print("i:", i, "a:", a, "b:", b, "diff:", b-a)
        //        b = (b - a) / 2.0 + a
        b = (b + a) / 2
        i = i + 1
    }
}

i: 0 a: 1.0 b: 2.0 diff: 1.0
i: 1 a: 1.0 b: 1.5 diff: 0.5
i: 2 a: 1.0 b: 1.25 diff: 0.25
i: 3 a: 1.0 b: 1.125 diff: 0.125
i: 4 a: 1.0 b: 1.0625 diff: 0.0625
i: 5 a: 1.0 b: 1.03125 diff: 0.03125
i: 6 a: 1.0 b: 1.015625 diff: 0.015625
i: 7 a: 1.0 b: 1.0078125 diff: 0.0078125
i: 8 a: 1.0 b: 1.00390625 diff: 0.00390625
i: 9 a: 1.0 b: 1.001953125 diff: 0.001953125
i: 10 a: 1.0 b: 1.0009765625 diff: 0.0009765625
i: 11 a: 1.0 b: 1.00048828125 diff: 0.00048828125
i: 12 a: 1.0 b: 1.000244140625 diff: 0.000244140625
i: 13 a: 1.0 b: 1.0001220703125 diff: 0.0001220703125
i: 14 a: 1.0 b: 1.00006103515625 diff: 6.103515625e-05
i: 15 a: 1.0 b: 1.000030517578125 diff: 3.0517578125e-05
i: 16 a: 1.0 b: 1.0000152587890625 diff: 1.52587890625e-05
i: 17 a: 1.0 b: 1.0000076293945312 diff: 7.62939453125e-06
i: 18 a: 1.0 b: 1.0000038146972656 diff: 3.814697265625e-06
i: 19 a: 1.0 b: 1.0000019073486328 diff: 1.9073486328125e-06
i: 20 a: 1.0 b: 1.0000009536743164 diff: 9.5367431640625e-07
i: 21 a: 1.0 b: 1.0000004768371582 diff: 4.76837158203125e-07
i: 22 a: 1.0 b: 1.000000238418579 diff: 2.384185791015625e-07
i: 23 a: 1.0 b: 1.0000001192092896 diff: 1.1920928955078125e-07
i: 24 a: 1.0 b: 1.0000000596046448 diff: 5.960464477539063e-08
i: 25 a: 1.0 b: 1.0000000298023224 diff: 2.9802322387695312e-08
i: 26 a: 1.0 b: 1.0000000149011612 diff: 1.4901161193847656e-08
i: 27 a: 1.0 b: 1.0000000074505806 diff: 7.450580596923828e-09
i: 28 a: 1.0 b: 1.0000000037252903 diff: 3.725290298461914e-09
i: 29 a: 1.0 b: 1.0000000018626451 diff: 1.862645149230957e-09
i: 30 a: 1.0 b: 1.0000000009313226 diff: 9.313225746154785e-10
i: 31 a: 1.0 b: 1.0000000004656613 diff: 4.656612873077393e-10
i: 32 a: 1.0 b: 1.0000000002328306 diff: 2.3283064365386963e-10
i: 33 a: 1.0 b: 1.0000000001164153 diff: 1.1641532182693481e-10
i: 34 a: 1.0 b: 1.0000000000582077 diff: 5.820766091346741e-11
i: 35 a: 1.0 b: 1.0000000000291038 diff: 2.9103830456733704e-11
i: 36 a: 1.0 b: 1.000000000014552 diff: 1.4551915228366852e-11
i: 37 a: 1.0 b: 1.000000000007276 diff: 7.275957614183426e-12
i: 38 a: 1.0 b: 1.000000000003638 diff: 3.637978807091713e-12
i: 39 a: 1.0 b: 1.000000000001819 diff: 1.8189894035458565e-12
i: 40 a: 1.0 b: 1.0000000000009095 diff: 9.094947017729282e-13
i: 41 a: 1.0 b: 1.0000000000004547 diff: 4.547473508864641e-13
i: 42 a: 1.0 b: 1.0000000000002274 diff: 2.2737367544323206e-13
i: 43 a: 1.0 b: 1.0000000000001137 diff: 1.1368683772161603e-13
i: 44 a: 1.0 b: 1.0000000000000568 diff: 5.684341886080802e-14
i: 45 a: 1.0 b: 1.0000000000000284 diff: 2.842170943040401e-14
i: 46 a: 1.0 b: 1.0000000000000142 diff: 1.4210854715202004e-14
i: 47 a: 1.0 b: 1.000000000000007 diff: 7.105427357601002e-15
i: 48 a: 1.0 b: 1.0000000000000036 diff: 3.552713678800501e-15
i: 49 a: 1.0 b: 1.0000000000000018 diff: 1.7763568394002505e-15
i: 50 a: 1.0 b: 1.0000000000000009 diff: 8.881784197001252e-16
i: 51 a: 1.0 b: 1.0000000000000004 diff: 4.440892098500626e-16
i: 52 a: 1.0 b: 1.0000000000000002 diff: 2.220446049250313e-16