老生常谈PHP中的数据结构:DS扩展_php实例_脚本之家

2019-11-26 16:07栏目:龙竞技官网
TAG:

PHP7以上才能安装和使用该数据结构扩展,安装比较简单:

  PHP7以上才能安装和使用该数据结构扩展,安装比较简单:

  1. 运行命令 pecl install ds

  2. 在php.ini中添加 extension=ds.so

  3. 重启PHP或重载配置

1. 运行命令 pecl install ds2. 在php.ini中添加 extension=ds.so3. 重启PHP或重载配置

Collection Interface:包含本库中所有数据结构通用功能的基本interface。 It guarantees that all structures are traversable, countable, and can be converted to json using json_encode().

在这些数据结构类型对象中,除了Pair、PriorityQueue对象之外,其余各种类型对象都支持数组语法。

DsCollection implements Traversable , Countable , JsonSerializable {/* 方法 */abstract public void clear abstract public DsCollection copy abstract public bool isEmpty abstract public array toArray }

Collection Interface:包含本库中所有数据结构通用功能的基本interface。 It guarantees that all structures are traversable, countable, and can be converted to json usingjson_encode().

Hashable Interface:which allows objects to be used as keys.

DsCollection implements Traversable , Countable , JsonSerializable {/* 方法 */abstract public void clear abstract public DsCollection copy abstract public bool isEmpty abstract public array toArray }
DsHashable {/* 方法 */abstract public bool equals abstract public mixed hash }

Hashable Interface:which allows objects to be used as keys.

Sequence Interface:A Sequence 相当于一个一维的数字key数组, with the exception of a few characteristics:

DsHashable {/* 方法 */abstract public bool equals ( object $obj )abstract public mixed hash }

Values will always be indexed as [0, 1, 2, …, size - 1].

Sequence Interface:A Sequence 相当于一个一维的数字key数组, with the exception of a few characteristics:

Only allowed to access values by index in the range [0, size - 1].

  • Values will always be indexed as [0, 1, 2, …, size - 1].
  • Only allowed to access values by index in the range [0, size - 1].

Wherever you would use an array as a list (not concerned with keys).

Use cases:

A more efficient alternative to SplDoublyLinkedList and SplFixedArray.

  • Wherever you would use an array as a list (not concerned with keys).
  • A more efficient alternative toSplDoublyLinkedListandSplFixedArray.

Vector Class:Vector是自动增长和收缩的连续缓冲区中的一系列值。它是最有效的顺序结构,值的索引直接映射到缓冲区中索引,增长因子不绑定到特定的倍数或指数。其具有以下优缺点:

Vector Class:Vector是自动增长和收缩的连续缓冲区中的一系列值。它是最有效的顺序结构,值的索引直接映射到缓冲区中索引,增长因子不绑定到特定的倍数或指数。其具有以下优缺点:

Supports array syntax .

  • Supports array syntax (square brackets).
  • Uses less overall memory than anarrayfor the same number of values.
  • Automatically frees allocated memory when its size drops low enough.
  • Capacity does not have to be a power of 2.
  • get(),set(),push(),pop()are all O.
  • 但是shift(),unshift(),insert()andremove()are all O.

Uses less overall memory than an array for the same number of values.

Automatically frees allocated memory when its size drops low enough.

DsVector::allocate — Allocates enough memory for a required capacity.DsVector::apply — Updates all values by applying a callback function to each value.DsVector::capacity — Returns the current capacity.DsVector::clear — Removes all values.DsVector::__construct — Creates a new instance.DsVector::contains — Determines if the vector contains given values.DsVector::copy — Returns a shallow copy of the vector.DsVector::count — Returns the number of values in the collection.DsVector::filter — Creates a new vector using a callable to determine which values to include.DsVector::find — Attempts to find a value's index.DsVector::first — Returns the first value in the vector.DsVector::get — Returns the value at a given index.DsVector::insert — Inserts values at a given index.DsVector::isEmpty — Returns whether the vector is emptyDsVector::join — Joins all values together as a string.DsVector::jsonSerialize — Returns a representation that can be converted to JSON.DsVector::last — Returns the last value.DsVector::map — Returns the result of applying a callback to each value.DsVector::merge — Returns the result of adding all given values to the vector.DsVector::pop — Removes and returns the last value.DsVector::push — Adds values to the end of the vector.DsVector::reduce — Reduces the vector to a single value using a callback function.DsVector::remove — Removes and returns a value by index.DsVector::reverse — Reverses the vector in-place.DsVector::reversed — Returns a reversed copy.DsVector::rotate — Rotates the vector by a given number of rotations.DsVector::set — Updates a value at a given index.DsVector::shift — Removes and returns the first value.DsVector::slice — Returns a sub-vector of a given range.DsVector::sort — Sorts the vector in-place.DsVector::sorted — Returns a sorted copy.DsVector::sum — Returns the sum of all values in the vector.DsVector::toArray — Converts the vector to an array.DsVector::unshift — Adds values to the front of the vector.

Capacity does not have to be a power of 2.

 

但是 shift, insert are all O.

Deque Class:“双端队列”的缩写,也用于DsQueue中,拥有head、tail两个指针。The pointers can “wrap around” the end of the buffer, which avoids the need to move other values around to make room. This makes shift and unshift very fast —  something aDsVectorcan’t compete with.其具有以下优缺点:

DsVector::allocate — Allocates enough memory for a required capacity.DsVector::apply — Updates all values by applying a callback function to each value.DsVector::capacity — Returns the current capacity.DsVector::clear — Removes all values.DsVector::__construct — Creates a new instance.DsVector::contains — Determines if the vector contains given values.DsVector::copy — Returns a shallow copy of the vector.DsVector::count — Returns the number of values in the collection.DsVector::filter — Creates a new vector using a callable to determine which values to include.DsVector::find — Attempts to find a value's index.DsVector::first — Returns the first value in the vector.DsVector::get — Returns the value at a given index.DsVector::insert — Inserts values at a given index.DsVector::isEmpty — Returns whether the vector is emptyDsVector::join — Joins all values together as a string.DsVector::jsonSerialize — Returns a representation that can be converted to JSON.DsVector::last — Returns the last value.DsVector::map — Returns the result of applying a callback to each value.DsVector::merge — Returns the result of adding all given values to the vector.DsVector::pop — Removes and returns the last value.DsVector::push — Adds values to the end of the vector.DsVector::reduce — Reduces the vector to a single value using a callback function.DsVector::remove — Removes and returns a value by index.DsVector::reverse — Reverses the vector in-place.DsVector::reversed — Returns a reversed copy.DsVector::rotate — Rotates the vector by a given number of rotations.DsVector::set — Updates a value at a given index.DsVector::shift — Removes and returns the first value.DsVector::slice — Returns a sub-vector of a given range.DsVector::sort — Sorts the vector in-place.DsVector::sorted — Returns a sorted copy.DsVector::sum — Returns the sum of all values in the vector.DsVector::toArray — Converts the vector to an array.DsVector::unshift — Adds values to the front of the vector.
  • Supports array syntax (square brackets).
  • Uses less overall memory than anarrayfor the same number of values.
  • Automatically frees allocated memory when its size drops low enough.
  • get(),set(),push(),pop(),shift(), andunshift()are all O.
  • 但Capacity must be a power of 2.insert()andremove.

Deque Class:“双端队列”的缩写,也用于DsQueue中,拥有head、tail两个指针。The pointers can “wrap around” the end of the buffer, which avoids the need to move other values around to make room. This makes shift and unshift very fast —  something a DsVector can't compete with. 其具有以下优缺点:

Map Class:键值对的连续集合,几乎与数组相同。键可以是任何类型,但必须是唯一的。如果使用相同的键添加到map中,则将替换值。其拥有以下优缺点:

Supports array syntax .

  • Keys and values can be any type, including objects.
  • Supports array syntax (square brackets).
  • Insertion order is preserved.
  • Performance and memory efficiency is very similar to anarray.
  • Automatically frees allocated memory when its size drops low enough.
  • Can’t be converted to an array when objects are used as keys.

Uses less overall memory than an array for the same number of values.

Pair Class:A pair is used byDsMapto pair keys with values.

Automatically frees allocated memory when its size drops low enough.

DsPair implements JsonSerializable {/* 方法 */public __construct ([ mixed $key [, mixed $value ]] )}

get, pop, and unshift.

Set Class:唯一值序列。This implementation uses the same hash table asDsMap, where values are used as keys and the mapped value is ignored.其拥有以下优缺点:

但Capacity must be a power of 2.insert are O.

  • Values can be any type, including objects.
  • Supports array syntax (square brackets).
  • Insertion order is preserved.
  • Automatically frees allocated memory when its size drops low enough.
  • add(),remove()andcontains()are all O.
  • 但Doesn’t supportpush(),pop(),insert(),shift(), orunshift().get if there are deleted values in the buffer before the accessed index, O otherwise.

版权声明:本文由龙竞技官网发布于龙竞技官网,转载请注明出处:老生常谈PHP中的数据结构:DS扩展_php实例_脚本之家