场景:
- 照片清单
- 每张照片都有以下属性
id
sequence_number
main_photo_bit
- 第一张照片
main_photo_bit
设置为1
(所有其他照片都是0
) - 照片按
sequence_number
(任意)排序 - 主图不一定最低
sequence_number
(排序前)
见下表:
id, sequence_number, main_photo_bit
1 10 1
2 5 0
3 20 0
现在您想通过更改序列号和主照片位来更改顺序。
排序后的要求:
- 第一
sequence_number
张照片的没有改变 - 第一
sequence_number
张照片的最低 - 尽可能少的变化
例子:
示例 #1(第二张照片放在第一个位置):
id, sequence_number, main_photo_bit
2 10 1
1 15 0
3 20 0
这就是发生的事情:
- id 1:新建
sequence_number
并main_photo_bit
设置为0
- id 2:旧的第一张照片(id 2)
sequence_number
并main_photo_bit
设置为1
- id 3:什么都没发生
示例#2(第三张照片到第一位置):
id, sequence_number, main_photo_bit
3 10 1
1 20 0
2 30 0
这就是发生的事情:
- id 1:新
sequence_number
的比第一张照片大并且main_photo_bit
到0
- id 2:新
sequence_number
的大于新生成的第二个sequence_number
- id 3:旧的第一张照片
sequence_number
并main_photo_bit
设置为1
计算保存新订单所需步骤的最佳方法是什么?
编辑:
我想要尽可能少的更新的原因是因为我想将它同步到外部服务,这是一个非常昂贵的操作。
我已经得到了该算法的工作原型,但在某些极端情况下它会失败。因此,与其修补它(这可能有效——但它会变得比现在更复杂),我想知道是否有其他(更好的)方法可以做到这一点。
在我的版本中(简而言之),它对照片进行排序(更改sequence_number
's),并交换 's main_photo_bit
,但这不足以解决所有场景。