Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как хранить и иметь быстрый доступ к данным? (https://javascript.ru/forum/misc/84837-kak-khranit-i-imet-bystryjj-dostup-k-dannym.html)

voraa 11.01.2023 16:47

Цитата:

Сообщение от webgraph
мм что-то не до конца понятно что вы имеете ввиду?))

Вы в первом посте перечислили все операции?
Если так, то для value (который внутри мэпа по участникам), ненужно другого мэпа с массивом, достаточно set, что бы проверить, есть ли операция с таким value у данного участника

voraa 11.01.2023 16:52

Цитата:

Сообщение от webgraph
Чувствуется, что здесь актуальнее использовать List ?)))

Мне не чувствуется. Все операции только добавить в конец и взять n последних. Ни удалений, ни вставок... Зачем List? Массив прекрасно справится.
Если вдруг понадобится какой то поиск, то все равно перебор, что у массива, что у списка.

webgraph 11.01.2023 17:06

Цитата:

Сообщение от voraa (Сообщение 549894)
Мне не чувствуется. Все операции только добавить в конец и взять n последних. Ни удалений, ни вставок... Зачем List? Массив прекрасно справится.
Если вдруг понадобится какой то поиск, то все равно перебор, что у массива, что у списка.

Может потому что в List быстрее добавляются элементы, чем в Array?)

voraa 11.01.2023 17:13

Цитата:

Сообщение от webgraph
Может потому что в List быстрее добавляются элементы, чем в Array?)

Нет. Это моментальная операция, которую вообще не стоит учитывать.
(На порядок быстрее, чем всякие переводы из строк в BigInt)

webgraph 11.01.2023 17:18

Цитата:

Сообщение от voraa (Сообщение 549896)
Нет. Это моментальная операция, которую вообще не стоит учитывать.
(На порядок быстрее, чем всякие переводы из строк в BigInt)

Всмысли нет? хахах)) мы же вместе проводили 100500 тестирований.

Ну а как вы предлагаете ещё хранить BigInt? Все эти данные необходимо ещё и экспортировать, импортировать. Конечно, при импорте актуально сразу в BigInt преобразовывать. Но в конечном-то счете это будет храниться в обычной строке.

voraa 11.01.2023 17:36

Цитата:

Сообщение от webgraph
Всмысли нет? хахах)) мы же вместе проводили 100500 тестирований.

Мы проводили сравнение не push, а вставку в середину массива, используя splice и удаление, и вставку и удаление со списком.
Тут список быстрее. Не надо ничего двигать, а только переписать 6 ссылок.
splice двигает конечную часть массива, освобождая место и меняя все дальнейшие индексы

У push просто запись в конец массива. Ничего двигать не надо.
У shift надо подвинуть весь массив, переписать все индексы
Вот сравните выполнение 100000 раз push и shift

const NA = 100_000;
let arr;
let na = NA;
arr = [];
let s = 'aaaaaa';
console.time('push');

while (na--) arr.push(s);

console.timeEnd('push');

na = NA;
arr = [];
console.time('shift');

while (na--) arr.unshift(s);

console.timeEnd('shift');

webgraph 11.01.2023 17:41

Цитата:

Сообщение от voraa (Сообщение 549898)
Мы проводили сравнение не push, а вставку в середину массива, используя splice, и вставку в середину списка.
Тут список быстрее. Не надо ничего двигать, а только переписать 6 ссылок.
splice двигает конечную часть массива, освобождая место и меняя все дальнейшие индексы

У push просто запись в конец массива. Ничего двигать не надо.
У shift надо подвинуть весь массив, переписать все индексы
Вот сравните выполнение 100000 раз push и shift

const NA = 100_000;
let arr;
let na = NA;
arr = [];
let s = 'aaaaaa';
console.time('push');

while (na--) arr.push(s);

console.timeEnd('push');

na = NA;
arr = [];
console.time('shift');

while (na--) arr.unshift(s);

console.timeEnd('shift');

Да, про Push и Shift — это очевидные вещи. Но если сравнить вставку в Array и вставку в List ?))

voraa 11.01.2023 17:43

Вставка (в смысле в середину) для списка быстрее. (ну для длинных массивов).
В конец дописать - массив однозначно быстрее.
То же для удаления.
Удалить последний (pop) массив быстрее. Если удалять из середины, то список быстрее

webgraph 11.01.2023 17:45

Цитата:

Сообщение от voraa (Сообщение 549900)
Вставка (в смысле в середину) для списка быстрее. (ну для длинных массивов).
В конец дописать - массив однозначно быстрее.

Причем здесь середина? Мы же добавляли в список в конец. А не в середину.

voraa 11.01.2023 17:54

Цитата:

Сообщение от webgraph
Ну а как вы предлагаете ещё хранить BigInt?

Все от величин зависит.
Если скажем взять обычные целые. Максимальное целое число, которое может быть точно представлено в js -
Number.MAX_SAFE_INTEGER = 2**53 - 1 = 9,007,199,254,740,991
16 разрядов однако.
Может этого будет достаточно?


Часовой пояс GMT +3, время: 00:27.