Класс Vector

(PECL ds >= 1.0.0)

Введение

Вектор - это последовательность значений в непрерывном буфере, который растёт и обрезается автоматически. Это наиболее эффективная последовательная структура, поскольку индексы значений прямо отображаются на их индекс в буфере, и фактор роста не влияет на сложность доступа.

Сильные стороны

  • Поддерживает синтаксис массива (квадратные скобки).
  • Использует меньше памяти, чем массив (array) с тем же количеством элементов.
  • Автоматически высвобождает память, когда количество элементов уменьшается.
  • Вместимость не ограничена степенями двойки.
  • get(), set(), push() и pop() имеют сложность O(1).

Слабые стороны

  • shift(), unshift(), insert() и remove() имеют сложность O(n).

Обзор классов

class Ds\Vector implements Ds\Sequence, ArrayAccess {
/* Константы */
const int MIN_CAPACITY = 10;
/* Методы */
public allocate(int $capacity): void
public apply(callable $callback): void
public capacity(): int
public clear(): void
public contains(mixed ...$values): bool
public copy(): Ds\Vector
public filter(callable $callback = ?): Ds\Vector
public find(mixed $value): mixed
public first(): mixed
public get(int $index): mixed
public insert(int $index, mixed ...$values): void
public isEmpty(): bool
public join(string $glue = ?): string
public last(): mixed
public map(callable $callback): Ds\Vector
public merge(mixed $values): Ds\Vector
public pop(): mixed
public push(mixed ...$values): void
public reduce(callable $callback, mixed $initial = ?): mixed
public remove(int $index): mixed
public reverse(): void
public rotate(int $rotations): void
public set(int $index, mixed $value): void
public shift(): mixed
public slice(int $index, int $length = ?): Ds\Vector
public sort(callable $comparator = ?): void
public sorted(callable $comparator = ?): Ds\Vector
public sum(): int|float
public toArray(): array
public unshift(mixed $values = ?): void
}

Предопределённые константы

Ds\Vector::MIN_CAPACITY

Список изменений

Версия Описание
PECL ds 1.3.0 Теперь класс реализует ArrayAccess.

Содержание

  • Ds\Vector::allocate — Выделяет память под указанную вместимость
  • Ds\Vector::apply — Обновляет все значения, применяя к ним переданную callback-функцию
  • Ds\Vector::capacity — Возвращает текущую вместимость
  • Ds\Vector::clear — Удаляет все значения
  • Ds\Vector::__construct — Создаёт новый экземпляр
  • Ds\Vector::contains — Проверяет, содержится ли в векторе заданные значения
  • Ds\Vector::copy — Возвращает поверхностную копию вектора
  • Ds\Vector::count — Возвращает количество элементов вектора
  • Ds\Vector::filter — Создаёт новый вектор из элементов, выбранных с помощью заданной callback-функции
  • Ds\Vector::find — Поиск индекса по значению
  • Ds\Vector::first — Возвращает первый элемент вектора
  • Ds\Vector::get — Возвращает значение по индексу
  • Ds\Vector::insert — Вставляет значения по указанному индексу
  • Ds\Vector::isEmpty — Проверяет, пуст ли вектор
  • Ds\Vector::join — Склеивает все значения в строку
  • Ds\Vector::jsonSerialize — Возвращает вектор в JSON-представлении
  • Ds\Vector::last — Возвращает последнее значение вектора
  • Ds\Vector::map — Возвращает результат применения callback-функции ко всем значениям вектора
  • Ds\Vector::merge — Возвращает результат добавления всех заданных значений в вектор
  • Ds\Vector::pop — Удаляет и возвращает последнее значение
  • Ds\Vector::push — Добавляет значения в конец вектора
  • Ds\Vector::reduce — Уменьшает вектор до одного значения, используя callback-функцию
  • Ds\Vector::remove — Удаляет и возвращает значение по индексу
  • Ds\Vector::reverse — Переворачивает текущий вектор
  • Ds\Vector::reversed — Возвращает перевёрнутую копию вектора
  • Ds\Vector::rotate — Перематывает вектор на заданное число значений
  • Ds\Vector::set — Заменяет значение по указанному индексу
  • Ds\Vector::shift — Удаляет и возвращает первое значение
  • Ds\Vector::slice — Возвращает подвектор из заданного диапазона
  • Ds\Vector::sort — Сортирует вектор
  • Ds\Vector::sorted — Возвращает отсортированную по значению копию коллекции
  • Ds\Vector::sum — Возвращает сумму всех значений коллекции
  • Ds\Vector::toArray — Преобразовывает коллекцию в массив (array)
  • Ds\Vector::unshift — Добавляет значения в начало вектора
add a note add a note

User Contributed Notes 1 note

up
0
fgheorghe at grosan dot co dot uk
8 years ago
It would be great if this class would not be final. A use case where I would want to extend the functionality, would be to enforce Vector items of a certain type - and emulate Java generics. I.e.:
public mixed get ( int $index ) : ClassName
public void set ( int $index , mixed $value ) : ClassName

Thus ensuring my vectors are made strictly of a certain type. I can emulate this behaviour with \ArrayAccess and \Iterator, but given this library is far more efficient I would prefer it over these two interfaces, when defining my datasets.
To Top