Какова структура данных Застежки-молнии, и я должен использовать ее?

Решение Herer:

/**
 * Tests two data structures for equality
 * @param {object} x
 * @param {object} y
 * @returns {boolean}
 */
var equal = function(x, y) {
    if (typeof x !== typeof y) return false;
    if (x instanceof Array && y instanceof Array && x.length !== y.length) return false;
    if (typeof x === 'object') {
        for (var p in x) if (x.hasOwnProperty(p)) {
            if (typeof x[p] === 'function' && typeof y[p] === 'function') continue;
            if (x[p] instanceof Array && y[p] instanceof Array && x[p].length !== y[p].length) return false;
            if (typeof x[p] !== typeof y[p]) return false;
            if (typeof x[p] === 'object' && typeof y[p] === 'object') { if (!equal(x[p], y[p])) return false; } else
            if (x[p] !== y[p]) return false;
        }
    } else return x === y;
    return true;
};

Работает с любой вложенной структурой данных и, очевидно, игнорирует методы объектов. Даже не думайте о расширении Object.prototype с помощью этого метода, когда я это пробовал один раз, jQuery сломался;)

Для большинства массивов он все же быстрее, чем большинство решений для сериализации. Вероятно, это самый быстрый метод сравнения для массивов записей объектов.

46
задан mmcdole 19 December 2008 в 09:14
поделиться

3 ответа

Давайте запустимся с Аналога застежки-молнии для списков. Если требуется изменить энный элемент списка, он берет O (n), потому что необходимо скопировать n-1 первые элементы. Вместо этого можно сохранить список как структуру ((первые n-1 элементы инвертированный) энный элемент (остающийся элементами)). Например, список (1 2 3 4 5 6) модифицируемый в 3 был бы представлен как ((2 1) 3 (4 5 6)). Теперь, можно легко изменить 3 на что-то еще. Можно также легко переместиться, фокус уехал ((1) 2 (3 4 5 6)) и право ((3 2 1) 4 (5 6)).

застежка-молния А является той же идеей, относился к деревьям. Вы представляете определенный фокус в дереве плюс контекст (до родителей, вниз детям), который дает Вам целое дерево в форме, где это является легко модифицируемым в фокусе, и легко переместить фокус вверх и вниз.

53
ответ дан namin 8 November 2019 в 00:15
поделиться

Вот очень хорошая статья, объясняя использование застежки-молнии для менеджера окон мозаичного размещения в Haskell. Статья Wikipedia не является хорошей ссылкой.

Короче говоря, застежка-молния является указателем или дескриптором к конкретному узлу в структуре списка или дереве. Застежка-молния уступает естественному дорогу из взятия древовидной структуры и обработки его, как будто дерево было "взято" сфокусированным узлом - в действительности, Вы получаете второе дерево, не требуя дополнительных копий, сделанных из исходного дерева или влияя на других пользователей дерева.

пример, данный шоу, как Вам отсортировало окна первоначально по местоположение на экране, и затем к образцовому фокусу, Вы используете застежку-молнию, указал на окно фокуса. Вы получаете хороший набор O (1) операции те, которые вставляют и удаляют, не имея необходимость к особому случаю окно фокуса или пишут дополнительный код.

14
ответ дан Flexo 8 November 2019 в 00:15
поделиться

Эта статья связана с Haskell, но она также объясняет застежки-молнии довольно хорошо, и это должно быть легко к краткому обзору от Haskell-специфических-особенностей.

3
ответ дан Magnus 8 November 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: