Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

238
Visualizações
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?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

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 } } ]
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda