我有一个带有ordernum字段的对象列表。
OrderNum字段必须与列表顺序匹配(但不要求连续)。
简单的解决方案当列表顺序更改时重置每个ordernum:
for (int i = 0; i < list.length; i++) {
list[i].OrderNum = i;
}
但是由于ordernum存储在sql中,因此重置的ordernum量越小越好。当ordernum必须重置时,更改可能会很大。有32位可供使用排序列表的检索者是:
SELECT * FROM orderable_items ORDER BY order_num;
实际的编程语言是C#。
最佳答案
假设数字的间距很小,可以执行以下操作:
计算原始列表中每个元素的目标索引
计算指数上的longest increasing subsequence(O(nlogn))值
保持计算子序列中元素的OrderNum不变
更改其余元素的ordernum,使它们落入适当的间隙中
这假设原始ordernums之间有足够的空间。在几次这样的重新排序之后,您可能需要重新调整这些数字,这样就可以了。
关于algorithm - 如何以最佳方式更改item.OrderNum字段以匹配列表顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5095405/