Quale sarebbe un modo funzionale per comprimere due dizionari in Scala?Zip due HashMaps (o dizionari)
map1 = new HashMap("A"->1,"B"->2)
map2 = new HashMap("B"->22,"D"->4) // B is the only common key
zipper(map1,map2)
dovrebbe dare qualcosa di simile a
Seq(("A",1,0), // no A in second map, so third value is zero
("B",2,22),
("D",0,4)) // no D in first map, so second value is zero
Se non è funzionale, qualsiasi altro stile è apprezzato anche
Datakap di Haskell ha un meraviglioso combinatore chiamato 'unionWith' che renderebbe questo incredibilmente facile. Esso e la sua controparte di intersezione sono straordinariamente utili, e mi dispiace che siano disponibili solo in 'IntMap' e' LongMap' di Scala (soprattutto perché sono tradotti da Haskell, mi aspetto). – copumpkin
@copumpkin: Haskell è incredibile! Verificherò unionWith.Io ho appena controllato IntMap e ora è sostituito da HashMap da 2.8 su – RAbraham
Non è in realtà superato da 'HashMap', nonostante ciò che il commento della documentazione suggerisce. Sono strutture differenti e 'IntMap' ha proprietà diverse. A volte non si desidera realmente la funzione di hashing, in particolare quando si desidera mantenere l'ordine dei dati. 'IntMap' potrebbe implementare per lo più' SortedMap', ma non credo che lo faccia adesso. Un pasticcio è che segue un ordinamento "non firmato", ma non è difficile farlo comportarsi come un segno firmato se è quello che ti serve. – copumpkin