Perl与JS的对比分析(数组、哈希)

上一篇列出了Perl中定义数组,对象的方式与JS的异同。这里继续补充数组,哈希的相关操作。

一、数组

可以对数组进行增删,插入。与JS不同的是这些函数都是全局的,JS则是挂在Array.prototype上。

1,对数组尾部的操作pop(删除最后的元素)、push(在尾部添加)

@goods = qw/pen pencil/;
pop(@goods); # @goods 变成 (pen)
push(@goods, 'brush'); # @goods 变为 (pen, brush)

在Perl中,函数调用时小括号是可选的(视上下文而定),就象前面使用的print。以下是等价的

pop @goods; # @goods 变成 pen
push @goods, 'brush'; # @goods 变为 (pen, brush)

2,对数组首部的操作shift(删除第一个元素)、unshift(在首部添加元素)

3,任意位置删除或插入splice

4,逆序数组,Perl有reverse函数,JS没有对应函数。

5,排序数组sort,Perl和JS都有。

2,3,4,5提到的函数不贴演示代码了。

6,JS使用length属性获取数组长度,Perl不同,有3种方式获取

@goods = qw/pen pencil/; 

# 将数组变量赋值给一个标量变量
$len = @goods; 

# 使用scalar函数
$len = scalar(@goods); 

# 最后一个元素的索引加1
$len = $#goods + 1;

7,遍历数组,Perl用foreach函数

@goods = qw/pen pencil brush/; 

# 默认的$_
foreach (@goods) {
 print "$_"."\n";
} 

# 自定义变量
foreach $item (@goods) {
 print "$item"."\n";
}

ES5可以用forEach

['pen', 'pencil', 'brush'].forEach(function(item) {
  console.log(item)
})

二、哈希

1,获取keys和values

%person = (
 name => 'Jack',
 age => 30,
);
@k = keys %person; # (name, age)
@v = values $person; # ('Jack', 30)

ES5有Object.keys,但没有Object.values

person = {
 name: 'Jack',
 age: 30
}
Object.keys(person) // ['name', 'age']

2,获取键值对(key-value)数量(对Perl来说很容易)

%person = (
 name => 'Jack',
 age => 30,
);
$len = keys %person; # 2

对于JS来说,可能需要for in整个对象

function getObjLen(obj) {
  var len = 0
  for (var a in obj) {
    if (obj.hasOwnProperty(a))
    len++
  }
  return len
} 

var person = {
  name: 'Jack',
  age: 30
}
getObjLen(person) // 2

3,遍历对象

Perl有两种方式,一种while+each,一种获取keys再foreach。

%person = (
 name => 'Jack',
 age => 30,
); 

# 方式1
while ( ($k, $v) = each %person ) {
 print "$k: $v"."\n";
} 

# 方式2
@keys = keys %person;
foreach(@keys) {
 print "$_: ".$person{$_}."\n";
}

JS一个for in即可。

4,判断某个key是否存在,Perl用exists函数

%person = (
 name => 'Jack',
 age => 30,
);
if (exists $person{ndame}) {
 print 'yes';
} else {
 print 'no';
}

JS用in运算符。

5,删除key,都用delete,但Perl是函数,JS是运算符

%person = (
 name => 'Jack',
 age => 30,
);
delete $person{'name'};

三、数组与哈希互换

Perl里哈希很容易就被转成数组

%person = (
 name => 'Jack',
 age => 30,
);
@arr = %person; # 将哈希转成数组 变成了('name', 'Jack', 'age', 30)

数组转成哈希

@nums = qw/zero 0 one 1 two 2/;
%hash = @nums;
while( ($k, $v) = each %hash ) {
 print "$k: $v\n";
}

打印如下

以上互换JS里没有原生支持,需自行实现。

以上这篇Perl与JS的对比分析(数组、哈希)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Perl 哈希Hash用法之入门教程

    一.什么是Perl Hash 哈希是一种数据结构,和数组类似,可以将值存放到其中,或者从中取回值.但是,和数组不同的是,其索引不是数字,而是名字.也就是说,索引(这里,我们将它叫key)不是数字而是任意的唯一的字符串. key可以是任意的字符串,你可以使用任何的字符串作为key,但它们是唯一的.另一种思考hash 的方法是,把它看作一堆数据(a barrel of data),每一个数据都有一个相应的标签.可以通过标签访问此标签对应的元素.但其中是没有"第一个"元素的概念的.在数组中,

  • Perl哈希表用法解析

    本文和大家重点讨论一下Perl哈希表的概念,Perl语言和其他编程语言各有各的特点,这里和大家分享一下Perl哈希表的概念,其实Perl哈希表是一种结构. Perl哈希表Perl哈希表是一种结构.key/value.访问Perl哈希表元素$Perl哈希表{$some_key}当给Perl哈希表选择名字时,最好这样思考:Perl哈希表元素的名字和key之间可以用for来连接.如thefamily_nameforfredisflintstone. 要引用整个Perl哈希表,使用百分号(%)作为前缀.

  • Perl 哈希的创建和引用介绍

    语法 创建'引用'仅有两种方法,使用它也是两种. 创建引用 创建规则 1 如果你在一个变量前加一个'/'号,你就得到了这个变量的'引用'. $aref = /@array;         # $aref 保存着指向@array的'引用'     $href = /%hash;          # $href 保存着指向%hash的'引用' 当你把'引用'保存在类似 $aref 或 $href的变量中,你就可以象操作其他标量一样copy或保存它. $xy = $aref;           

  • php-perl哈希算法实现(times33哈希算法)

    复制代码 代码如下: APR_DECLARE_NONSTD(unsigned int) apr_hashfunc_default(const char *char_key,                                                      apr_ssize_t *klen){    unsigned int hash = 0;    const unsigned char *key = (const unsigned char *)char_key;  

  • perl哈希hash的常见用法介绍

    基本用法 #初始化%h为空数组 %h={};#用数组初始化%h为a=>1,b=>2  %h=('a',1,'b',2);#意义同上,只是另一种更形象化的写法.%h=('a'=>1,'b'=>2);#如果key是字符串,可以省略引号.下面这行和上面那行是一样的%h=(a=>1,b=>2);#用{}来访问print "$h{a}\n";#打印 $h{b}='2b'; print "$h{b}\n"; #打印2b#删除key用delet

  • perl哈希的一个实例分析

    复制代码 代码如下: #!/bin/perluse strict;  use warnings; my %movies;  my $film;  my %reverse_result;  my $director;  my @data; %movies =  (    'The Shining'       => 'Kubrick',    'Ten Commandments'  => 'DeMille',    'Goonies'           => 'Spielberg', 

  • Perl与JS的对比分析(数组、哈希)

    上一篇列出了Perl中定义数组,对象的方式与JS的异同.这里继续补充数组,哈希的相关操作. 一.数组 可以对数组进行增删,插入.与JS不同的是这些函数都是全局的,JS则是挂在Array.prototype上. 1,对数组尾部的操作pop(删除最后的元素).push(在尾部添加) @goods = qw/pen pencil/; pop(@goods); # @goods 变成 (pen) push(@goods, 'brush'); # @goods 变为 (pen, brush) 在Perl中

  • AngularJS下对数组的对比分析

    Javascript不能直接用==或者===来判断两个数组是否相等,无论是相等还是全等都不行,以下两行JS代码都会返回false <script type="text/javascript"> alert([]==[]); alert([]===[]); </script> 要判断JS中的两个数组是否相同,需要先将数组转换为字符串,再作比较.以下两行代码将返回true <script type="text/javascript">

  • Vue.js绑定HTML class数组语法错误的原因分析

    Vue.js绑定HTML class数组语法错误,详情如下所示: 昨天在官网教程上发现一个错误是这样的,下面看图 http://cn.vuejs.org/guide/class-and-style.html 当有多个条件class时这样写有些繁琐.在1.0.19+中,可以在数组语法中使用对象语法: 如果这样写是可以执行成功的,但有错误 data: { classA: 'class-a', classB: 'class-b', classC: 'class-c', isB: true, isC:

  • 浅谈MySQL和Lucene索引的对比分析

    MySQL和Lucene都可以对数据构建索引并通过索引查询数据,一个是关系型数据库,一个是构建搜索引擎(Solr.ElasticSearch)的核心类库.两者的索引(index)有什么区别呢?以前写过一篇<Solr与MySQL查询性能对比>,只是简单的对比了下查询性能,对于内部原理却没有解释,本文简单分析下两者的索引区别. MySQL索引实现 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式. M

  • 对比分析Django的Q查询及AngularJS的Datatables分页插件

    使用Q查询,首先要导入Q模块: from django.db.models import Q 可以组合使用&,|操作符用于多个Q的对象,产生一个新的Q对象,Q对象也可以用~操作符放在前面表示否定,如下例所示: if search: keywords_list = search.split(' ') query_list = [Q(status__icontains=get_success_fail_status(keyword)) if get_success_fail_keyword_stat

  • Kotlin与Java的主客观对比分析

    Kotlin Kotlin是一门相对比较新的JVM语言,JetBrains自2011年以来一直在积极地开发. 多年来,该语言在Android社区受到的关注度越来越高,并在Google IO 2017大会之后成为Android开发领域最热门的话题.这次大会宣布,Android正式支持Kotlin. 遗憾的是,虽然已经有许多关于Kotlin的文章,但并没有多少客观信息,许多开发人员仍然在苦思冥想,迁移到Kotlin是否是一条正确的道路. 在本文的剩余部分,我将尝试提供一个在将Kotlin作为Java

  • Go/Python/Erlang编程语言对比分析及示例代码

    本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉. Go的很多语言特性借鉴与它的三个祖先:C,Pascal和CSP.Go的语法.数据类型.控制流等继承于C,Go的包.面对对象等思想来源于Pascal分支,而Go最大的语言特色,基于管道通信的协程并发模型,则借鉴于CSP分支. Go/Python/Erlang语言特性对比 如<编程语言与范式>一文所说,不管语言如何层出不穷

  • Python和Java的语法对比分析语法简洁上python的确完美胜出

    Python是一种广泛使用的解释型.高级编程.通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年.可以视之为一种改良(加入一些其他编程语言的优点,如面向对象)的LISP.Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词).相比于C++或Java,Python让开发者能够用更少的代码表达想法.不管是小型还是大型程序,该语言都试图让程序的结构清晰明了. Java是一种广泛使用的计算机编程语言,拥有跨平台.面向对象.泛型编程的特性,广

  • JS判断两个数组或对象是否相同的方法示例

    本文实例讲述了JS判断两个数组或对象是否相同的方法.分享给大家供大家参考,具体如下: JS 判断两个数组是否相同 要判断2个数组是否相同,首先要把数组进行排序,然后转换成字符串进行比较. JSON.stringify([1,2,3].sort()) === JSON.stringify([3,2,1].sort()); //true 或者 [1,2,3].sort().toString() === [3,2,1].sort().toString(); //true 经验证,上述方法对复杂数组结构

  • python Tensor和Array对比分析

    如下所示: 区别 Array Tensor 类型 uint8,float32系列 {} 各类型相互转换 uint8转float64:image = image * (2. / 255.) - 1 float64转uint8:image.astype(np.uint8) {} 扩充维度 image[np.newaxis, :] tf.expand_dims(image,axis=0) 数组拼接 np.concatenate([image, image], axis=0) tf.concat([fr

随机推荐