- 论坛徽章:
- 0
|
回复 4# rubyish
rubyish兄,
写成这样,看懂了,非常感谢兄的指点:)
map { my @s = split $split_regex, $_; [ $s[$sort_field], $_ ] } @data;
再看原来的就明白了
<1> ( split $split_regex, $_ )[$sort_field] 相当于 (@array)[$sort_field],是数组取值,$sort_field是下标
<2> [ ( split $split_regex, $_ )[$sort_field], $_ ],相当于[$a, $b],是一个匿名数组
<3>整体看
my @sorted_data =
map { $_->[1] }
sort { $a->[0] <=> $b->[0] }
map { [ ( split $split_regex, $_ )[$sort_field], $_ ] }
@data;
(a) map { [ ( split $split_regex, $_ )[$sort_field], $_ ] } @data; => 取@data的最后一列和原来的数组值组成一个匿名数组,以第一个元素为例,就是[9, 7 8\t 9]
(b) sort { $a->[0] <=> $b->[0] } => 匿名数组按最后一列升序排序
[3, 1 2\t 3]
[6, 4 5\t 6]
[9, 7 8\t 9]
(c) map { $_->[1] } => 取匿名数组的第二个元素,得到以最后一列排序的数组。
[1 2\t 3, 4 5\t 6, 7 8\t 9]
|
|