数组和哈希的数值排序问题(sort)
2012-12-08 14:39
295 查看
在perl中对数组或者散列进行排序的工具是sort,在这儿,一般分为两种,字符串和数值(阿拉伯数字)排序问题,sort默认的情况是使用Ascall码排序。
1、sort format
>> sort USERSUB LIST
>> sort BLOCK LIST
>> sort LIST
在此,LIST其实就是一个列表,比如一个数组,或者散列使用keys进行转换。
缺省USERSUB或BLOCK时,默认的是标准字符串比较顺序排序(未定义数值排在已定义空字符串前面,而空字符串又在其他任何东西前面)。如果use locale用法起作用,那么sort LIST根据当前的区域集的数值对lIST进行排序。
2、一般情况下,字符之间的比较用cmp,数值比较用 <=>.
3、为了提高效率,通常情况下是不用子过程的。
4、$a and $b 是sort编译所在的包的全局变量,是真实值的别名,所以一般情况下不要修改它们。
5、Example:
#!/usr/bin/perl
use strict;
use warnings;
my %ha;
$ha{1} = 7;
$ha{2} = 11;
$ha{3} = 13;
$ha{4} = 12;
$ha{5} = 23;
$ha{6} = 2;
$ha{11} = 32;
$ha{10} = 9;
my @k = keys %ha;
my @v = values %ha;
sub bykey { $a <=> $b }
sub byvalue { $ha{$a} <=> $ha{$b} }
##对数组的值进行排序
foreach my $c ( sort bykey @k ) {
print "$c => $ha{$c}\n";
}
1 => 7
2 => 11
3 => 13
4 => 12
5 => 23
6 => 2
10 => 9
11 => 32
##sort的操作的对象是列表,处理散列其实首先是转换为列表形式,结果同上。
foreach my $k ( sort bykey keys %ha ) {
print "$k => $ha{$k}\n";
}
###对数组进行排序
foreach my $c ( sort byvalue @k ) {
print "$c => $ha{$c}\n";
}
6 => 2
1 => 7
10 => 9
2 => 11
4 => 12
3 => 13
5 => 23
11 => 32
###这里的value的子过程还是比较能说明问题的,其实就是输入两个key的值,转换为value,之后再对value的值进行排序,里面的别名现在已然不是$a or $b,结果同上。
foreach my $k ( sort byvalue keys %ha ) {
print "$k => $ha{$k}\n";
}
######################
#sort排序的基本用法还是很简单的,但是后面的比较复杂的数据结构进行排序的时候,还是有点麻烦的,懒得看了,不好意思,就先这样吧。
1、sort format
>> sort USERSUB LIST
>> sort BLOCK LIST
>> sort LIST
在此,LIST其实就是一个列表,比如一个数组,或者散列使用keys进行转换。
缺省USERSUB或BLOCK时,默认的是标准字符串比较顺序排序(未定义数值排在已定义空字符串前面,而空字符串又在其他任何东西前面)。如果use locale用法起作用,那么sort LIST根据当前的区域集的数值对lIST进行排序。
2、一般情况下,字符之间的比较用cmp,数值比较用 <=>.
3、为了提高效率,通常情况下是不用子过程的。
4、$a and $b 是sort编译所在的包的全局变量,是真实值的别名,所以一般情况下不要修改它们。
5、Example:
#!/usr/bin/perl
use strict;
use warnings;
my %ha;
$ha{1} = 7;
$ha{2} = 11;
$ha{3} = 13;
$ha{4} = 12;
$ha{5} = 23;
$ha{6} = 2;
$ha{11} = 32;
$ha{10} = 9;
my @k = keys %ha;
my @v = values %ha;
sub bykey { $a <=> $b }
sub byvalue { $ha{$a} <=> $ha{$b} }
##对数组的值进行排序
foreach my $c ( sort bykey @k ) {
print "$c => $ha{$c}\n";
}
1 => 7
2 => 11
3 => 13
4 => 12
5 => 23
6 => 2
10 => 9
11 => 32
##sort的操作的对象是列表,处理散列其实首先是转换为列表形式,结果同上。
foreach my $k ( sort bykey keys %ha ) {
print "$k => $ha{$k}\n";
}
###对数组进行排序
foreach my $c ( sort byvalue @k ) {
print "$c => $ha{$c}\n";
}
6 => 2
1 => 7
10 => 9
2 => 11
4 => 12
3 => 13
5 => 23
11 => 32
###这里的value的子过程还是比较能说明问题的,其实就是输入两个key的值,转换为value,之后再对value的值进行排序,里面的别名现在已然不是$a or $b,结果同上。
foreach my $k ( sort byvalue keys %ha ) {
print "$k => $ha{$k}\n";
}
######################
#sort排序的基本用法还是很简单的,但是后面的比较复杂的数据结构进行排序的时候,还是有点麻烦的,懒得看了,不好意思,就先这样吧。
相关文章推荐
- js:数组重排序问题:如何使用sort()方法按数值的大小进行升序或降序排列
- javascript中用数组sort排序问题
- 集合相等问题(java sort排序数组长度问题)
- 对于js数组排序的问题 arr.sort()
- java数组排序问题:array.sort()是从小到大排序,那么如何从大到小排序?
- js关于数组排序问题 arr.sort(function(){});
- js数组sort()排序的问题
- 我们用sort asort 对数组排序时 中文如何按拼音排序的问题
- JavaScript 使用 sort() 方法从数值上对数组进行排序
- 数组计数排序,类似于桶排序小问题
- 通过V8源码看一个关于JS数组排序的诡异问题
- JavaScript - Array对象的使用 及 数组排序 sort
- javascript数组(1) ——sort的工作原理及其他数组排序方法
- 数组排序sort()
- 数组符值后,排序和修改,两个数组都会变的问题
- js使用Array.prototype.sort()对数组对象排序的方法
- 使用qsort对二维字符数组排序疑难问题调试及解决过程
- js sort 数组排序
- JavaScript sort() 方法数组排序数字【每日一段代码93】
- [CareerCup] 11.2 Sort Anagrams Array 异位词数组排序