• Empleos
  • Sobre nosotros
  • Empleos
    • Inicio
    • Empleos
    • Cursos y retos
  • Empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

195
Vistas
Javascript Map string vs rendimiento de clave entera

Mi caso es que necesito almacenar una clave única para realizar un seguimiento de mis millones de modelos en Javascript y almacenar el par clave-valor en un Mapa.

Hay una biblioteca uuid existente que generará una clave de cadena para mí, pero me temo que necesitaría una clave entera para lograr un rendimiento óptimo. Sin embargo, parece que tendré que convertir la cadena uuid en un entero único, lo cual no es trivial y también tiene una sobrecarga.

¿Hay una diferencia significativa al usar una cadena como clave para un mapa o un número entero?

over 3 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Aquí hay una solución basada en nuestra conversación.

Hay muchas formas similares de hacer esto, pero la clave es almacenar el índice inverso para la búsqueda en el propio modelo, de modo que cada modelo "sabe" dónde se encuentra en el índice del modelo.

Editar: hubo un error en mi primer ejemplo que habría aparecido cuando la matriz se volvió escasa debido a la reducción de array.length.

Este es un ejemplo más avanzado que elimina el error y tiene una clase dataIndex que es responsable de la indexación y donde los modelos pueden tener búsquedas inversas para múltiples índices.

 class dataIndex { constructor(indexId) { this.vec = []; this.indexId = indexId; this.indexNext = 0; } indexModel(model) { this.vec[model.lookup[this.indexId] = this.indexNext++] = model; return this; } } class dataModel { constructor(data) { this.data = data; this.lookup = new Map(); } static compareData(a, b) { return (a.data === b.data) ? 0: (a.data > b.data) ? 1 : -1; } } const modelIndex = new dataIndex('primary'); const sortedIndex = new dataIndex('sorted'); for (let i = 0; i < 10; i++) { let newModel = new dataModel(Math.random()); modelIndex.indexModel(newModel); } const ordered = modelIndex.vec.sort((a, b) => dataModel.compareData(a, b)) ordered.forEach(model => sortedIndex.indexModel(model)); console.log(ordered);

Producción:

 [ dataModel { data: 0.08420389624353097, lookup: Map(0) { primary: 9, sorted: 0 } }, dataModel { data: 0.1528733550120258, lookup: Map(0) { primary: 7, sorted: 1 } }, dataModel { data: 0.28483626134194595, lookup: Map(0) { primary: 8, sorted: 2 } }, dataModel { data: 0.3257986769682104, lookup: Map(0) { primary: 5, sorted: 3 } }, dataModel { data: 0.3409113857134396, lookup: Map(0) { primary: 3, sorted: 4 } }, dataModel { data: 0.3841968173496322, lookup: Map(0) { primary: 1, sorted: 5 } }, dataModel { data: 0.40414714769598237, lookup: Map(0) { primary: 4, sorted: 6 } }, dataModel { data: 0.5817767975980099, lookup: Map(0) { primary: 0, sorted: 7 } }, dataModel { data: 0.8091360598739015, lookup: Map(0) { primary: 2, sorted: 8 } }, dataModel { data: 0.8217632650897493, lookup: Map(0) { primary: 6, sorted: 9 } } ]
over 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda