Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

239
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!