加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

将一行Perl转换为PHP

发布时间:2020-12-15 23:22:31 所属栏目:大数据 来源:网络整理
导读:我正在将文件从Perl转换为 PHP,但我需要帮助这一行: @stuff_unique = grep!$list {$_},@ material;. 我知道stuff_unique和东西是数组. 解决方法 这是常见的Perl习语,在 perlfaq4中描述 使用这个结构,@ material_unique将最终得到一个在@stuff中至少看过一
我正在将文件从Perl转换为 PHP,但我需要帮助这一行:
@stuff_unique = grep!$list {$_},@ material;.
我知道stuff_unique和东西是数组.

解决方法

这是常见的Perl习语,在 perlfaq4中描述

使用这个结构,@ material_unique将最终得到一个在@stuff中至少看过一次的项目列表;换句话说,在没有重复的意义上,它只保留唯一的值.它的工作方式是这样的:

Perl中的哈希就像一个具有唯一键的关联数组. %list就是这样的哈希. $list {something}是该hash中名为’something’的元素.它的价值可以是你放置的任何东西.

grep遍历@stuff中的项目.对于stuff中的每个项目,该项目将用作%list哈希中的哈希键.增加该对应哈希元素的值.因此,如果@stuff包含“1,2,1”,那么在第一次迭代时,将创建名为“1”的哈希元素.它没有值,转换为布尔值false.的!在前面颠倒布尔意义.因此,在第一次迭代中,’1’哈希元素的false值被计算为true,因此该元素将传递给@stuff_unique.最后,发生后增量,因此1哈希元素中保存的值递增为1.

在第二个元素上,2还没有被看到,所以它通过,其相应的哈希元素也增加到1.

在第三次迭代中,再次看到“1”. $list {1}已经等于1,这是一个真值.真的是假的;所以这个不会传递给@stuff_unique.

@stuff中的元素将以这种方式逐一测试;检测他们以前是否曾经见过,如果没有,他们会通过@stuff_unique.

PHP提供了一个名为array_unique的函数,它应该为您做同样的事情.它会像这样使用:

$stuff_unique = array_unique($stuff);

对于Perl人来说幸运的是,这是一个线性时间操作.不幸的是,对于PHP人员来说,这是通过对输入数组进行排序,然后在其上进行迭代,在此过程中跳过重复项来实现的.这意味着它是一个O(n n log n)操作(简化为O(n log n)),也就是说,它的实现不能像普通的Perl习惯一样扩展.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读