在我的perl progarm中,我有以下代码:
@alpha=('toM','jERRy','mickeY','MARio');
print sort{$a cmp $b} @alpha,' "***MIDDLE STRING***" ';
Run Code Online (Sandbox Code Playgroud)
在这里它打印
'"***中间弦***"'
首先是排序的@alpha列表.为什么它以相反的顺序打印,何时打印
print "a","b";
Run Code Online (Sandbox Code Playgroud)
版画
AB
按正确的顺序.我google了寻求帮助,但它谈到了perl的"反向"功能/方法,但我没有在我的代码中使用该功能.我发现答案无关紧要.
我想这与"打印"功能的内部工作有关,使用"堆栈"数据结构,但我不知道.有人帮助我.
提前致谢...
' "***MIDDLE STRING***" '是一个参数sort,所以它与元素一起排序@alpha.
如果要打印@alpha后跟该字符串的已排序内容,可以执行以下操作:
print +(sort{$a cmp $b} @alpha), ' "***MIDDLE STRING***" ';
Run Code Online (Sandbox Code Playgroud)
请注意,如果没有一元+,则括号应用于print调用,字符串文字前面的逗号是逗号运算符,而不是参数之间的分隔符.(是的,这是该语言的一个奇怪特征.)
将它写成两个单独的语句更清楚:
print sort {$a cmp $b} @alpha;
print ' "***MIDDLE STRING***" ';
Run Code Online (Sandbox Code Playgroud)
print sort {$a cmp $b} @alpha,' "***MIDDLE STRING***" '; #1
print sort {$a cmp $b} (@alpha,' "***MIDDLE STRING***" '); #2
print (sort {$a cmp $b} @alpha), ' "***MIDDLE STRING***" '; #3
(print sort {$a cmp $b} @alpha), ' "***MIDDLE STRING***" '; #4
print ((sort {$a cmp $b} @alpha), ' "***MIDDLE STRING***" '); #5
print sort {$a cmp $b} @alpha; #6
print ' "***MIDDLE STRING***" ';
print sort(@alpha), ' "***MIDDLE STRING***" '; #7
print sort({$a cmp $b} @alpha), ' "***MIDDLE STRING***" '; #8
Run Code Online (Sandbox Code Playgroud)
#1和#2是等价的:由于Perl自动展平列表,因此在sort包含@alpha加上字符串的所有元素的列表上运行.您可能想要添加一些括号sort(#3),但这也无济于事,因为它被解释为两个元素(#4)的列表:调用的结果print和字符串.因此,字符串不会被打印,因为它与之无关print.
您可以使用一组额外的括号(#5)或将其拆分(#6),但知道sort {$a cmp $b} @alpha相同sort @alpha,您可以省略该块,括号变得简单(#7).按照同样的规则,如果你确实需要比较函数,你可以将两个参数sort放在括号内,而不是用逗号分隔(#8).
我还想为不同类型的排序定义subs,以使代码更易于阅读:
sub numerically { $a <=> $b }
sub backward { $b cmp $a }
print sort(numerically @array); # Sort numerically ascending.
print sort(backward @array); # Sort lexicographically descending.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |