Haskell Language
Vettori
Ricerca…
Osservazioni
[Data.Vector] ha un'enfasi su prestazioni molto elevate attraverso la fusione loop, pur conservando un'interfaccia ricca. I principali tipi di dati sono array in box e unboxed e gli array possono essere immutabili (puri) o mutabili. Gli array possono contenere elementi memorizzabili, adatti per il passaggio da e verso C, e puoi convertire tra i tipi di array. Gli array sono indicizzati da valori Int non negativi.
Haskell Wiki ha queste raccomandazioni :
In generale:
- Gli utenti finali dovrebbero utilizzare Data.Vector.Unboxed per la maggior parte dei casi
- Se è necessario memorizzare strutture più complesse, utilizzare Data.Vector
- Se è necessario passare a C, utilizzare Data.Vector.Storable
Per gli scrittori di biblioteche;
- Utilizza l'interfaccia generica per garantire che la tua libreria sia flessibile al massimo: Data.Vector.Generic
Il modulo Data.Vector
Il modulo Data.Vector fornito dal vettore è una libreria ad alte prestazioni per lavorare con gli array.
Una volta importato Data.Vector
, è facile iniziare a utilizzare un Vector
:
Prelude> import Data.Vector Prelude Data.Vector> let a = fromList [2,3,4] Prelude Data.Vector> a fromList [2,3,4] :: Data.Vector.Vector Prelude Data.Vector> :t a a :: Vector Integer
Puoi persino avere un array multidimensionale:
Prelude Data.Vector> let x = fromList [ fromList [1 .. x] | x <- [1..10] ] Prelude Data.Vector> :t x x :: Vector (Vector Integer)
Filtrare un vettore
Filtra elementi dispari:
Prelude Data.Vector> Data.Vector.filter odd y
fromList [1,3,5,7,9,11] :: Data.Vector.Vector
Mappatura (`mappa`) e Riduzione (` piega`) di un vettore
Vettori possono essere map
'd e fold'd,
il filtro 'd and
zip`'d:
Prelude Data.Vector> Data.Vector.map (^2) y
fromList [0,1,4,9,16,25,36,49,64,81,100,121] :: Data.Vector.Vector
Riduci a un singolo valore:
Prelude Data.Vector> Data.Vector.foldl (+) 0 y
66
Lavorando su più vettori
Comprimi due array in una serie di coppie:
Prelude Data.Vector> Data.Vector.zip y y
fromList [(0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10),(11,11)] :: Data.Vector.Vector