Лучшая структура данных в javascript для определенных отношений - PullRequest
0 голосов
/ 02 августа 2020

Я уже разместил здесь свой вопрос:

Лучшая структура данных в javascript для определенных отношений

Сейчас я пытаюсь переформулировать мою проблему и сделать ее более понятной .

Предположим, у меня есть таблица (например, в файле .csv) с двумя столбцами и несколькими тысячами строк. В первом столбце находятся массивы от 5 до 8 целых чисел, каждое из которых 0, 1, 2 или 3. Во втором у меня есть массив массивов, содержащих два целых числа. Это может выглядеть как

[3, 1, 2, 2, 0, 0, 2]      |   [[4, 50], [5, 50]]
[2, 2, 0, 1, 1, 0, 0, 1]   |   [[2, 50], [5, 100], [6, 50]]
.
.
.
[0, 2, 0, 0, 3]            |   [[0, 10], [2, 10], [3, 10]]

Теперь я хочу загрузить эту таблицу в javascript, чтобы сохранить ее таким образом, чтобы, например, для массива [2, 2, 0, 1, 1, 0, 0, 1] , получение массива [[2, 50], [5, 100], [6, 50]] происходило очень быстро. . Каков наилучший способ / структура данных для хранения этой таблицы / отношения для очень быстрого поиска?

Заранее спасибо.

Изменить: отношения между вводом и выводом следующие: ноль на входе есть массив с двумя целыми числами на выходе, первое целое число - это позиция нуля. Второе целое число - это определенный балл за ввод. Расчет этого балла немного сложен, но я думаю, что для этого вопроса он не представляет интереса. Можно просто предположить, что эта таблица дана.

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Вы захотите использовать Map.

Хотя теоретически он может использовать объекты массива в качестве ключа, он будет сравнивать их по идентичности, вы, вероятно, ищете поиск по значению. Самый простой способ решения этой проблемы - использовать строковое представление массива в качестве ключа, например JSON.stringify(arr) или arr.join('|').

const table = [
  [[3, 1, 2, 2, 0, 0, 2], [[4, 50], [5, 50]]],
  [[2, 2, 0, 1, 1, 0, 0, 1], [[2, 50], [5, 100], [6, 50]]],
  [[0, 2, 0, 0, 3], [[0, 10], [2, 10], [3, 10]]],
];

const map = new Map(table.map(([key, val]) => [key.join('|'), val]));

console.log(map.get([0, 2, 0, 0, 3].join('|')));
0 голосов
/ 02 августа 2020

Учитывая, что вы действительно хотите расставить приоритеты для получения пар ключ / значение, карта ha sh должна быть самым быстрым решением. Простые объекты js предлагают встроенную опцию хэш-карты (которая подходит, если ваши ключи уникальны.

Вам следует рассмотреть объект js Map, если вы wi sh используете объекты Array ( которые могут содержать те же значения), что и ключи.

например,

var arrayA = [1,2,3]
var arrayB = [1,2,3]
var map = new Map()
map2.set(arrayA, 'first')
map2.set(arrayB, 'second')
map2.get(arrayA) >> 'first'
map2.get(arrayB) >> 'second'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...