javascript - 在由元素 :position pairs 组成的字典中移动元素

标签 javascript algorithm sorting data-structures dictionary

我有这样一个字典:{a:0, b:1, c:2}。实际上,字段名称及其在表中的顺序。我需要求助于此结构,以便(例如)如果 b 的位置变为 0,则结​​果为 {b:0, a:1, c:2}。如果 b 的位置变为 2 那么结果必须是 {a:0, c:1, b:2} 等等...

如何做到这一点?我不能使用内置函数(如果有的话),因为该字典中的每个字段都来自更复杂的结构。我基本上只能迭代这个字典,排序与否,并更改位置值。

我使用 Javascript/Coffeescript,但这没关系 - 我会很感激任何语言的想法。

最佳答案

考虑需要发生什么:如果将某个值从第 n 阶移动到第 n' 阶,实际上只有第 n 阶和 n' 之间的值的顺序发生变化。如果 n > n',则向下移动一位,如果 n < n',则向上移动一位。这是一些伪代码:

function(dict, name, newOrder)
{
    var oldOrder = dict[name];
    foreach((k, order) in dict)
    {
        if(order > oldOrder && order <= newOrder)
            dict[k]--;
        else if(order >= newOrder && order < oldOrder)
            dict[k]++;
    }
    dict[name] = newOrder;
}

关于javascript - 在由元素 :position pairs 组成的字典中移动元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19559353/

相关文章:

c++ - 如何替换我的 'for' 循环以通过 STL mimax 算法查找最小值/最大值

algorithm - 将 CRC32 和从 LSB 优先算法转换为 MSB 优先算法的和

python - 如何使用 Python 和 OpenCV 从左到右、从上到下对轮廓进行排序

jquery 数据表固定列未定义

c# - 如何在 Windows 窗体 C# 的 DataGridView 中更改 'sort glyph icon' 颜色?

javascript - 最快的 JavaScript 重定向

javascript - HTTP Basic Auth 中的自定义 HTML 登录表单

javascript - 如何让函数 `clearInterval`本身?

javascript - 使用 vuejs 1.0 设置内联属性

python - 从给定的元素列表生成随机 numpy 数组,每个元素至少重复一次