0
我正在学习perl,并希望对文件中的列进行排序。我在网上找到了这个代码。有人可以帮助我在列中的列排序代码
my @array = (
"kyy1 x753y420 31082010 07:01:11",
"exr1 x831y444 31082010 07:43:45",
"eef1 x717y532 31082010 07:30:17",
"bab3 x789y486 31082010 08:08:56",
"sam1 x1017y200 31082010 07:25:18",
"jmd2 x789y466 31082010 07:38:22",
"baa3cqc x720y440 31082010 07:26:37"
);
# Sort by first column - login name
my @sortedName = sort { (split ' ', $a)[0] cmp (split ' ', $b)[0] } @array;
# Sort by second column - SKU number
my @sortedSkno = sort { (split ' ', $a)[1] cmp (split ' ', $b)[1] } @array;
# Sort by third - date - and fourth - time - column combined!
my @sortedTime = sort { (split ' ', $a)[2].(split ' ', $a)[3] cmp (split ' ', $b)[2].(split ' ', $b)[3] } @array;
print "Array\n";
print join("\n", @array)."\n\n";
print "Sort Name\n";
print join("\n", @sortedName)."\n\n";
print "Sort Skno\n";
print join("\n", @sortedSkno)."\n\n";
print "Sort Date\n";
print join("\n", @sortedTime)."\n\n";
但我不明白以下行完全
# Sort by first column - login name
my @sortedName = sort { (split ' ', $a)[0] cmp (split ' ', $b)[0] } @array;
什么我不明白的是,排序函数有两个参数(split ' ', $a)[0]
和(split ' ', $b)[0]
。这些代表排序功能使用的特殊变量$a
和$b
。如果那是真的,那么如何在(split ' ', $a)[0]
再次分裂功能$a
!?
'$ a'和'$ b'对应于数组中的元素。你可以在这里阅读它:http://perldoc.perl.org/functions/sort.html – chilemagic 2014-10-06 23:18:43
'$ a'和'$ b'确实是特殊变量,但你可以用各种方式转换它们 - 例如。将它们拆分并使用结果数组中的某个元素进行排序。 – 2014-10-06 23:26:51
好的。两个问题。1)如果在具有say(1,2,3)的数组上使用sort,$ a需要1,$ b需要2?那么3什么时候进入图片。 2)任何人都可以简单地解释我在sort {(split'',$ a)[0] cmp(split'',$ b)[0]} @array)执行时概念上发生了什么。 – Curious 2014-10-07 00:36:04