Используя пост - Структура данных Javascript для быстрого поиска и упорядоченного цикла в качестве отправной точки, я пытаюсь создать структуру, подобную электронной таблице, которая будет иметь двумерные ключи.
Для одномерного ключевого индекса решение, связанное с вышеупомянутым, использует этот код:
function OrderedMap() {
this.map = {};
this._array = [];
}
OrderedMap.prototype.set = function(key, value) {
// key already exists, replace value
if(key in this.map) {
this.map[key] = value;
}
// insert new key and value
else {
this._array.push(key);
this.map[key] = value;
}
};
Вместо одного key
, я хочу адаптировать эту процедуру для использования с двумя ключами, row
и col
.Это то, что я придумал.Но прежде чем идти по этому пути, есть ли лучший / более простой способ или способ, который будет иметь более высокую производительность с большими наборами данных?
Обновление Меня беспокоит код ниже, что он основан на row
.Если я захочу воздействовать на row
данных, это будет довольно эффективно.Однако, если я хочу воздействовать на column
данных, я должен циклически проходить через каждый row
и действовать на column
в каждом row
.
Это внутренняя проблема, связанная с работой с двумерными структурами, или есть другой способ, который больше работает на уровне cell
и может быстро зацикливаться либо rows
, либо columns
?
Этот код будет использоваться для управления данными в электронной таблице Javascript.Следовательно, требуется гибкость для быстрой навигации по строкам или столбцам.
Спасибо за вашу помощь.
function OrderedMap() {
this.map = {};
this._array = [];
}
OrderedMap.prototype.set = function (row, col, value) {
if(row in this.map) {
if(col in this.map[row]) {
// key already exists, replace value
this.map[row][col] = value;
} else {
// insert new key and value
this._array[row].push(col);
this.map[row][col] = value;
}
}
// insert new key and value
else {
this._array.push(row);
this._array[row] = [];
this._array[row].push(col);
this.map[row] = {};
this.map[row][col] = value;
}
};
var map = new OrderedMap;
map.set(1, 1, {type: "cat"});
map.set(1, 2, {type: "mouse"});
map.set(2, 1, {type: "dog"});
map.set(3, 3, {type: "frog"});
console.log(map.map[2][1]);