Haskell Language
векторы
Поиск…
замечания
Он [Data.Vector] делает упор на очень высокую производительность благодаря слиянию циклов, сохраняя при этом богатый интерфейс. Основными типами данных являются массивы в коробке и распакованные массивы, а массивы могут быть неизменными (чистыми) или изменяемыми. Массивы могут содержать элементы Storable, подходящие для перехода на C и из C, и вы можете конвертировать между типами массивов. Массивы индексируются неотрицательными значениями Int.
У Haskell Wiki есть следующие рекомендации :
В общем:
- Конечные пользователи должны использовать Data.Vector.Unboxed для большинства случаев
- Если вам нужно хранить более сложные структуры, используйте Data.Vector
- Если вам нужно перейти на C, используйте Data.Vector.Storable
Для библиотекарей;
- Используйте общий интерфейс, чтобы обеспечить максимально гибкую библиотеку: Data.Vector.Generic
Модуль Data.Vector
Модуль Data.Vector, предоставляемый вектором, представляет собой высокопроизводительную библиотеку для работы с массивами.
После того, как вы импортировали Data.Vector
, легко начать использовать 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
Вы даже можете иметь многомерный массив:
Prelude Data.Vector> let x = fromList [ fromList [1 .. x] | x <- [1..10] ] Prelude Data.Vector> :t x x :: Vector (Vector Integer)
Фильтрация вектора
Фильтровать нечетные элементы:
Prelude Data.Vector> Data.Vector.filter odd y
fromList [1,3,5,7,9,11] :: Data.Vector.Vector
Отображение (`map`) и уменьшение (` fold`) вектора
Векторы могут быть map
'd и fold'd,
filter '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
Уменьшить до одного значения:
Prelude Data.Vector> Data.Vector.foldl (+) 0 y
66
Работа с несколькими векторами
Замените два массива на массив пар:
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