perl 第十弹 函数III

Posted 流浪骆驼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl 第十弹 函数III相关的知识,希望对你有一定的参考价值。

记得点击蓝字关注我们哦!


0 1

上期回顾

join函数、split函数、map函数、splice函数、sort函数含义用法


思考 perl 第十弹 函数III:pop 、shift、unshift、push 用splice替换应该是怎样的?


splice替换 含义
shift splice(ARRAY,0,1)
起始位置0,步长1的元素移除,即为移除第一个元素
unshift
splice(ARRAY,0,0,LIST) 起始位置0,步长0的元素,即为起始位置前添加第一个元素
pop splice(ARRAY,$#ARRAY,1) 起始位置为列表最后的index,步长1的元素移除,即为最后一个元素
push
splice(ARRAY,$#ARRAY,0,LIST) 起始位置为列表最后的index,步长0的元素添加元素,即为列表最后添加一个元素


0 2

函数

reverse 函数负责翻转数组中元素的排列顺序,使得原本降序排列的数组元素变成升序,反之亦然。

用法:reverse(LIST)

@names=("Bob", "Dan", "Tom", "Guy");@reversed=reverse(@names),"n";print "@reversedn";
__END__(output)Guy Tom Dan Bob


keys 函数将返回一个数组,该数组的所有元素都是指定散列表(Hash)的键。
用法:keys(HASH)
# 创建%weekday哈希%weekday= ( '1'=>'Monday', '2'=>'Tuesday', '3'=>'Wednesday',    '4'=>'Thursday',    '5'=>'Friday', '6'=>'Saturday',    '7'=>'Sunday',);# 通过keys函数,取到哈希%weekday的全部键,foreach逐个循环每个键# 注意:哈希是无序的foreach $key ( keys(%weekday) ){     print "$key ";}__END__(output)7 1 2 3 4 5 6

values 函数能以随机顺序返回含有一个散列表中所有值的数组。
用法:values(HASH)
# 创建%weekday哈希%weekday= ( '1'=>'Monday', '2'=>'Tuesday', '3'=>'Wednesday', '4'=>'Thursday', '5'=>'Friday', '6'=>'Saturday', '7'=>'Sunday',);# 通过values函数,取到哈希%weekday的全部值,foreach逐个循环每个值foreach $value( keys(%weekday) ){ print "$value ";}__END__(output)Monday Tuesday Wednesday Thursday Friday Saturday Sunday


each 函数能以随机顺序返回一个双元素数组,该数组的一个元素是散列表项的键,另一个元素则是该键所对应的值。

用法:each(HASH)

# 创建%weekday哈希%weekday=( 'Mon' => 'Monday', 'Tue' => 'Tuesday', 'Wed' => 'Wednesday',  'Thu' => 'Thursday', 'Fri' => 'Friday', 'Sat' => 'Saturday', 'Sun' => 'Sunday',);# each函数返回哈希%weekday中的每个键及其对应值。# 然后分别将这些键和值赋给标量, while逐个循环每个键值对 $key 与$valuewhile(($key,$value)=each(%weekday)){ print "$key = $value
";}__END__(output)Sat = SaturdayFri = FridaySun = SundayThu = ThursdayWed = WednesdayTue = TuesdayMon = Monday


delete 函数负责从哈希中删除指定值。如果成功就返回删掉的这个值。

用法:delete $HASH{KEY}

# 创建%employees哈希%employees=( "Nightwatchman" => "Joe Blow",   "Janitor" => "Donald Trump", "Clerk" => "Sally Olivetti",);# 根据指定的键,delete 函数将从散列中删除一个相应的元素。# 在此过程中,该元素的键和值都会删除。# 删除并返回与键Janitor 相关联的哈希# 然后把返回值Donald Trump 赋予变量$layoff。$layoff=delete $employees{"Janitor"};print "We had to let $layoff go.
";print "Our remaining staff includes: ";print "
";# while逐个循环每个键值对,查看%employees哈希中剩余的键值对while(($key, $value)=each(%employees)){    print "$key: $value
";}
__END__(output)We had to let Donald Trump go.Our remaining staff includes:Nightwatchman: Joe BlowClerk: Sally Olivetti


如果散列的键(或数组下标)已经定义,则exists 函数返回true,否则返回false。

用法:exists $HASH{KEY}

# 创建%employees哈希%employees=( "Nightwatchman" => "Joe Blow", "Janitor" => "Donald Trump", "Clerk" => "Sally Olivetti",);# 如果已经定义了键“Nightwatchman”,exists 函数会返回true。# 如果 exists $employees{"Nightwatchman"} 返回的值为true# 则执行11行语句if ( exists $employees{"Nightwatchman"} ){ print "The Nightwatchman exists.
" };__END__(output)The Nightwatchman exists.



上下文:

重点(理解上下文是perl入门的门槛):

如果出现在赋值运算符左侧的是标量的话,右侧表达式会在标量型上下文中求值;如果左侧变量是数组型的话,右侧的表达式则会在列表型上下文中求值。

# 创建数组@list@list = (90,89,78,100,87);$str="Hello, world";# reverse 函数翻转一个数组的所有元素,并将翻转后的元素赋予另一个数组。# 其上下文是列表型的。@revlist = reverse(@list);# reverse 函数翻转一个字符串的所有字符,并返回一个标量型的字符串。# 其上下文是标量型的。$revstr = reverse($str);print "Reversed array is: @revlist
";print "Reversed string is: $revstr
";# 在这里,reverse 又一次对数组进行了翻转,# 但这次生成的数组则会赋值给一个字符串。# 由于其上下文是标量型的,# 因此该函数会翻转数组的所有元素,然后把列表转换为一个字符串。$newstring = reverse(@list); print "List reversed, contextstring: $newstring
";
__END__(Output)Original array: 90 89 78 100 87Original string: Hello, worldReversed array is: 87 100 78 89 90Reversed string is: dlrow ,olleHList reversed, context string: 78001879809



0 3

总结

  • reverse函数、keys函数、values函数、each函数、delete函数含义用法

  • 理解上下文





ps: HAPPY NEW YEARperl 第十弹 函数III

     

      新年立下flag,一起学习,一起成长吧~



END






上期推荐阅读
@





以上是关于perl 第十弹 函数III的主要内容,如果未能解决你的问题,请参考以下文章

『PyTorch』第十弹_循环神经网络

第十弹:DPM

北漂生活第十弹-食堂真的挤

北漂生活第十弹-食堂真的挤

如何有条件地将 C 代码片段编译到我的 Perl 模块?

perl中的队列