首页 » PHP教程 » php中DS技巧_一路进修PHP中的DS数据结构扩展二

php中DS技巧_一路进修PHP中的DS数据结构扩展二

访客 2024-10-27 0

扫一扫用手机浏览

文章目录 [+]

$vector = new \Ds\Vector(["a", "b", "c"]);$vector->push("d");$vector->push(5);$vector->push(6);$vector->push(7);$vector->push(8);$vector->set(3, "ccc");var_dump($vector->get(3)); // string(3) "ccc"var_dump($vector->pop()); // int(8)$vector->unshift(1);$vector->unshift(-1); var_dump($vector->shift()); // int(-1)$vector->insert(5, 'five');var_dump($vector->get(5)); // string(4) "five"var_dump($vector->get(6)); // int(5)$vector->remove(6);var_dump($vector->get(6)); // int(6)var_dump($vector[4]); // string(3) "ccc"$vector[4] = 'Num 4.';var_dump($vector[4]); // string(6) "Num 4."var_dump($vector);// object(Ds\Vector)#1 (8) {// [0]=>// int(1)// [1]=>// string(1) "a"// [2]=>// string(1) "b"// [3]=>// string(1) "c"// [4]=>// string(6) "Num 4."// [5]=>// string(4) "five"// [6]=>// int(6)// [7]=>// int(7)// }

它的很多方法和 Map 都是类似的,不过它支持 push()、pop()、shift()、unshift() 这四种方法,也便是分别从尾部和头部添加和取出数据。
其余在底层,它利用的总内存会少于利用数组,当分配的内存大小降到到足够低的时候会自动开释内存。
对付 get()、set()、push()、pop() 这些方法的操作效率都能达到 O(1) 的水平,而对付 shift()、unshift()、insert()、remove() 这些操作则都是 O(n) 的水平。
至于在什么场景下利用就很清晰了,很大的数组利用它可以节约内存,并且一些操作的效率还非常高。

在 Map 中利用 values() 和 paris() 返回的就都是 Vector 这个类型的凑集。

php中DS技巧_一路进修PHP中的DS数据结构扩展二

唯一凑集 Set

Set 这个凑集构造实在挺常见的,不止是 Java 这些编程措辞中,redis 中也有这种存储数据的办法,相信大家不会陌生。
和其它构造最显著的差异便是 Set 中的值必须是唯一的。

php中DS技巧_一路进修PHP中的DS数据结构扩展二
(图片来自网络侵删)

$set = new \Ds\Set(["a", "b", "c"]);$set->add("d");$set->add("b");var_dump($set);// object(Ds\Set)#2 (4) {// [0]=>// string(1) "a"// [1]=>// string(1) "b"// [2]=>// string(1) "c"// [3]=>// string(1) "d"// }

这个就不多做阐明了,相信大家就算没有在代码中用过,也会在 redis 的利用中打仗过,业务场景也非常多。
在上篇文章中 Map 返回的 keys() 信息便是 Set 构造的,由于 Map 中的键是不能有重复的,包括数字下标的数组实在也都是不能有重复的键值的。

双端行列步队 Deque

双端行列步队其实在表现形式上和 Vector 差不多,同样可以在行列步队的头尾部进行增加取出操作,不过它有两个指针分别指向行列步队的头尾部,以是它的 shift() 和 unshift() 的速率也是非常快的 O(1) 级别。

$deque = new \Ds\Deque(["a", "b", "c"]);$deque->push("d");$deque->unshift("z");var_dump($deque);// object(Ds\Deque)#3 (5) {// [0]=>// string(1) "z"// [1]=>// string(1) "a"// [2]=>// string(1) "b"// [3]=>// string(1) "c"// [4]=>// string(1) "d"// }var_dump($deque->pop()); // string(1) "d"var_dump($deque->shift()); // string(1) "z"总结

本日先容的内容比较上篇文章大略很多,但上篇文章实在也只是测试的代码结果展示的比较多而已。
整体的 DataStruct 扩展框架中的数据构培养是这些,就像最开始我们说过的,如果没有特殊的需求,只是须要用到栈或行列步队的话,直策应用 SPL 中的就可以了。
而如果有分外的需求,比如说 Map 这种工具类型,又或者须要一个节约内存的数组,那么 Ds 中的这些数据构造想必会是你的好帮手。

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/2021/02/source/3.一起学习PHP中的DS数据构造扩展(二).php

参考文档:

https://www.php.net/manual/zh/book.ds.php

标签:

相关文章

Java代码虚拟化保护技术与应用前景

软件应用的需求日益增长,软件开发过程中对代码的保护成为了一个重要议题。Java作为一种广泛应用于企业级应用的编程语言,其代码虚拟化...

PHP教程 2025-03-02 阅读1 评论0

CAD插件错误代码与应对步骤

CAD(计算机辅助设计)软件在工程设计领域得到了广泛应用。CAD插件作为提升设计效率的重要工具,在提高设计师工作效率的也带来了一定...

PHP教程 2025-03-02 阅读1 评论0

上古卷轴代码规则大全游戏背后的编程奥秘

《上古卷轴》作为一款深受玩家喜爱的角色扮演游戏,自问世以来便以其丰富的世界观、独特的游戏体验和深厚的文化底蕴吸引了无数玩家。在这款...

PHP教程 2025-03-02 阅读1 评论0