È semplice l'implementazione di hash e array immutabile in javascript? Non ho bisogno della migliore velocità, una velocità ragionevole migliore di un clone sarebbe buono.Implementazione di hash e array immutabile in JavaScript?
Inoltre, se ci sono semplici implementazioni in Java o altri linguaggi che possono essere facilmente comprensibile e portato a JavaScript, sarebbe anche bello.
UPDATE:
L'obiettivo è quello di non solo ha congelato l'hash (o array), ma per rendere un efficace attuazione di un'operazione di aggiornamento - aggiornamento hash immutabile dovrebbe restituire un nuovo hash immutabile. E dovrebbe essere più efficiente di farlo "clonare l'originale e aggiornarlo".
I tipi di JS nativi hanno complessità di aggiornamento qualcosa come O (1), con la clonazione la complessità sarà O (n), con strutture di dati immutabili speciali (quello che ho chiesto) sarà 0 (log (n))
UPDATE2: JavaScript ha già Array/Hash:
Sì, ma sono mutevoli, ho bisogno di qualcosa di simile, ma immutabile, in fondo si può essere fatto molto semplicemente clonazione hash2 = hash1.clone(); hash2[key] = value
ma è molto inefficiente, ci sono algoritmi che lo hanno reso molto efficiente, senza utilizzare lo clone
.
hash1 = {}
hash2 = hash1.set('key', 'value2')
hash3 = hash1.set('key', 'value3)
console.log(hash1) // => {}
console.log(hash2) // => {key: 'value2'}
console.log(hash3) // => {key: 'value3'}
SOLUZIONE:
Non è un'implementazione per hash immutabile, ma più come un hack per il mio problema attuale, forse aiuta anche qualcuno.
Un po 'di più sul perché ho bisogno di strutture di dati immutabili - Io uso Node.js e una sorta di database in memoria. Una richiesta può leggere il database, altri aggiornarlo - l'aggiornamento può richiedere molto tempo (chiamare i servizi remoti) - quindi non posso bloccare tutti i processi di lettura e attendere che l'aggiornamento sia terminato, anche l'aggiornamento potrebbe fallire e il database dovrebbe essere ripristinato . Quindi ho bisogno di isolare (ACID) in qualche modo le operazioni di lettura e scrittura sul database in memoria.
Ecco perché ho bisogno di matrici e hash immutabili - per implementare una sorta di MVCC. Ma sembra che ci sia un modo più semplice per farlo. Invece di aggiornare direttamente il database - l'operazione di aggiornamento registra solo le modifiche al database (ma non lo esegue direttamente) - in forma di "aggiungi 42 a array db.someArray".
Alla fine, il prodotto dell'operazione di aggiornamento sarà una serie di comandi di modifica e, poiché può essere applicato molto rapidamente, possiamo bloccare il database per applicarlo.
Ma, sarà ancora interessante vedere se ci sono implementazioni di strutture di dati immutabili in javascript, quindi lascerò aperta questa domanda.
Che cos'è "hash e array". JavaScript ha matrici; stai pensando ad una collezione indicizzata come 'java.util.Vector'? – eh9
Ogni oggetto in javascript può essere considerato come una tabella hash in cui è possibile accedere al valore di dicendo obj [chiave] Che cosa stai esattamente cercando? –
Sì JavaScript ha Matrici ma sono mutabili, ho bisogno di qualcosa di simile ma immutabile. –