PHP資料的DS擴充

來源:互聯網
上載者:User
  PHP7以上才能安裝和使用該資料結構擴充,安裝比較簡單:

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().

    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 Interface:which allows objects to be used as keys.

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

  • Sequence Interface:A 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 )}

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.