欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP数据的DS扩展

程序员文章站 2022-04-19 20:15:26
...
  PHP7以上才能安装和使用该数据结构扩展,安装比较简单:
1. 运行命令 pecl install ds

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

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

    Ds\Collection implements Traversable , Countable , JsonSerializable {/* 方法 */abstract public void clear ( void )abstract public Ds\Collection copy ( void )abstract public bool isEmpty ( void )abstract public array toArray ( void )
    }

  • Hashable Interfacewhich allows objects to be used as keys.

    Ds\Hashable {/* 方法 */abstract public bool equals ( object $obj )abstract public mixed hash ( void )
    }

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

    Use cases:

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

    • A more efficient alternative to SplDoublyLinkedList and SplFixedArray.

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

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

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

      Ds\Vector::allocate — Allocates enough memory  a required capacity.::apply — Updates all values by applying a   to  value.::capacity — Returns the  capacity.::clear — Removes all values.::__construct — Creates a  instance.::contains — Determines  the vector contains given values.:: — Returns a shallow  of the vector.:: — Returns the  of values in the collection.::filter — Creates a  vector using a callable to determine which values to .::find — Attempts to find a value'

       

      • Supports array syntax (square brackets).

      • Uses less overall memory than an array for 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(1).

      • 但是 shift(), unshift(), insert() and remove() are all O(n).

    • Deque Class:“双端队列”的缩写,也用于Ds\Queue中,拥有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 Ds\Vector can’t compete with. 其具有以下优缺点:

      • Supports array syntax (square brackets).

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

      • Automatically frees allocated memory when its size drops low enough.

      • get(), set(), push(), pop(), shift(), and unshift() are all O(1).

      • 但Capacity must be a power of 2.insert() and remove() are O(n).

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

      • 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 an array.

      • Automatically frees allocated memory when its size drops low enough.

      • Can’t be converted to an array when objects are used as keys.

    • Pair Class:A pair is used by Ds\Map to pair keys with values.

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

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

      • 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() and contains() are all O(1).

      • 但Doesn’t support push(), pop(), insert(), shift(), or unshift(). get() is O(n) if there are deleted values in the buffer before the accessed index, O(1) otherwise.

    • Stack Class: “last in, first out”集合,只允许在结构顶部进行访问和迭代。

      Ds\Stack implements Ds\Collection {/* 方法 */public void allocate ( int $capacity )public int capacity ( void )public void clear ( void )public Ds\Stack copy ( void )public bool isEmpty ( void )public mixed peek ( void )public mixed pop ( void )public void push ([ mixed $...values ] )public array toArray ( void )
      }

    • Queue Class“first in, first out”集合,只允许在结构前端进行访问和迭代。

      Ds\Queue implements Ds\Collection {/* Constants */const int MIN_CAPACITY = 8 ;/* 方法 */public void allocate ( int $capacity )public int capacity ( void )public void clear ( void )public Ds\Queue copy ( void )public bool isEmpty ( void )public mixed peek ( void )public mixed pop ( void )public void push ([ mixed $...values ] )public array toArray ( void )
      }

    • PriorityQueue Class:优先级队列与队列是非常相似的,但值以指定的优先级被推入队列,优先级最高的值总是位于队列的前面,同优先级元素“先入先出”顺序任然保留。在一个PriorityQueue上递代是具有破坏性的,相当于连续弹出操作直到队列为空。Implemented using a max heap.

      Ds\PriorityQueue implements Ds\Collection {/* Constants */const int MIN_CAPACITY = 8 ;/* 方法 */public void allocate ( int $capacity )public int capacity ( void )public void clear ( void )public Ds\PriorityQueue copy ( void )public bool isEmpty ( void )public mixed peek ( void )public mixed pop ( void )public void push ( mixed $value , int $priority )public array toArray ( void )
      }

    以上就是PHP数据的DS扩展的详细内容,更多请关注其它相关文章!